我有一个webview,有些页面要求显示一个新的对话窗口。问题是WebChromeClient中的onCreateWindow仅在第一次显示对话框时被调用。初始调用工作并创建必要的窗口,只要在Web视图中单击一个项目,该项目将显示新对话框,它将永远不会显示,并且永远不会调用onCreateWindow。
以下是创建新对话框的相关代码:
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
if (isDialog) {
createDialogWithWebView(view, resultMsg);
return true;
}
return true;
}
protected void createDialogWithWebView(WebView webview, Message resultMsg) {
AlertDialog.Builder alert = new AlertDialog.Builder(webview.getContext());
alert.setTitle(R.string.app_name);
WebView dialogWebView = createNewWebView(webview);
alert.setView(dialogWebView);
alert.setNegativeButton("Close", new DismissWebViewAlertDialogOnClickListener(dialogWebView));
loadWebView(dialogWebView, resultMsg);
alert.show();
}
protected void loadWebView(WebView view, Message resultMsg) {
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(view);
resultMsg.sendToTarget();
}
private WebView createNewWebView(WebView webView) {
WebView newWebView = new WebView(webView.getContext());
setFusionWebViewSettings(newWebView);
newWebView.setWebChromeClient(this);
newWebView.setWebViewClient(new CustomWebViewClient(webView.getContext()));
newWebView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
return newWebView;
}
protected void setFusionWebViewSettings(WebView newWebView) {
WebSettings settings = newWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setPluginState(WebSettings.PluginState.ON);
settings.setJavaScriptCanOpenWindowsAutomatically(false);
settings.setDefaultTextEncodingName("utf-8");
settings.setSupportMultipleWindows(false);
}
第一次正确创建窗口,之后的任何时候如果要创建相同的内容,它永远不会进入oncreate。有没有办法告诉WebView或ChromeClient应该重新创建窗口?
答案 0 :(得分:0)
我找到了解决方法。埋在WebChromeClient中的是一个需要重写的onRequestFocus(Webview视图)方法。这将传入先前创建的视图。请注意,如果要在对话框中显示webview,则需要先缓存上一个对话框并重新显示它,或从父项中删除webview,然后创建对话框。