반응형

#1 팝업으로 뜬 창이 최대화면이 되지 않으므로 현재 웹뷰의 레이아웃파라미터를 설정

#2 window.close, windows.opener 등의 스크립트가 먹지 않는 경우이므로 해당 스크립트를 본문에서 찾으면 팝업을 닫고 원래 웹뷰를 재로드(필요하다면 loadurl로 다른 페이지 호출 가능)

            @Override
            public boolean onCreateWindow(final WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
                
                WebView newWebView = new WebView(context);
                newWebView.getSettings().setJavaScriptEnabled(true);
                newWebView.getSettings().setSupportMultipleWindows(false);
                newWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
                newWebView.getSettings().setLoadWithOverviewMode(true);

                android.view.ViewGroup.LayoutParams lp = view.getLayoutParams();   // #1
                newWebView.setLayoutParams(lp);

                view.addView(newWebView);
                WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
                transport.setWebView(newWebView);
                resultMsg.sendToTarget();

                newWebView.setWebViewClient(new WebViewClient() {

                    // #2 6.0 브라우저들이 window.close, window.opener 등이 먹히질 않을때가 있음 강제로 재로드 할 것
                    @Override
                    public void onPageFinished(WebView _view, String url) {
                        super.onPageFinished(_view, url);
                        _view.evaluateJavascript("(function() { return \"<html>\" + document.getElementsByTagName('html')[0].innerHTML + \"</html>\";})()", new ValueCallback<String>() {
                            @Override
                            public void onReceiveValue(String s) {
                                Log.i("HTMLOUT" , s);
                                if( s.toLowerCase().contains("window.close();window.opener.location.reload()")) {
                                    Log.i("HTMLOUT" , "브라우저 현재 닫기");
                                    view.reload();
                                    view.removeView(_view);
                                }
                            }
                        });
                    }

                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        //Log.i("TAG","onCreateWindow shouldOverrideUrlLoading"+url);
                        view.loadUrl(url);
                        return true;
                    }

                });

                return true;

            }
반응형

'Mobile > Android Studio(Android)' 카테고리의 다른 글

sdkmanager --licenses / sdkmanager.bat --licenses  (0) 2021.02.25

+ Recent posts