在Android WebView中重新显示对话框

时间:2014-06-16 17:08:44

标签: android android-webview

我有一个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应该重新创建窗口?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。埋在WebChromeClient中的是一个需要重写的onRequestFocus(Webview视图)方法。这将传入先前创建的视图。请注意,如果要在对话框中显示webview,则需要先缓存上一个对话框并重新显示它,或从父项中删除webview,然后创建对话框。