티스토리 뷰

안드로이드

WebView에서 팝업(popup) 보이기

성현아빠 2019. 11. 13. 17:19

WebView로 앱을 만들고 있는데 본인인증하는 본인인증 버튼을 눌러도 아무런 동작이 안되는 문제 발생.

검색을 해서 onCreateWindow() 함수를 정의해 줬지만, 화면이 겹쳐보이는 문제가 다시 발생.

 

onCreateWindow 함수로 검색을 해서 원하는 문제를 해결할 수 있었다.

 

1. WebView의 설정 

KOTLIN

webview.apply {
    settings.javaScriptEnabled = true
    settings.setSupportMultipleWindows(true)
    settings.javaScriptCanOpenWindowsAutomatically = true
}

 

2. WebChromeClient의 onCreateWindow() 설정

@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
  // Dialog Create Code
  WebView newWebView = new WebView(mActivity);
  WebSettings webSettings = newWebView.getSettings();
  webSettings.setJavaScriptEnabled(true);

  final Dialog dialog = new Dialog(mActivity);
  dialog.setContentView(newWebView);

  ViewGroup.LayoutParams params = dialog.getWindow().getAttributes();
  params.width = ViewGroup.LayoutParams.MATCH_PARENT;
  params.height = ViewGroup.LayoutParams.MATCH_PARENT;
  dialog.getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
  dialog.show();
  newWebView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onCloseWindow(WebView window) {
    	dialog.dismiss();
    }
  });

  // WebView Popup에서 내용이 안보이고 빈 화면만 보여 아래 코드 추가
  newWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
      return false;
    }
  });
        
  ((WebView.WebViewTransport)resultMsg.obj).setWebView(newWebView);
  resultMsg.sendToTarget();
  return true;

}

 

2020.03.17 추가 내용

Popup WebView에 내용이 안보이는 문제가 발생.

Dialog용 Webview에 shouldOverrideUrlLoading을 override 처리 해줘니 해결. 

        newWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return false;
            }
        });

 

자세한 내용과 설명은 아래의 출처에서...

출처 : https://dla210.blog.me/221657051563