#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;
}