为什么Android WebChromeClient的onCreateWindow方法永远不会被调用?

时间:2012-03-01 06:55:53

标签: android webview

我正在webview服务上构建我的应用程序并尝试在另一个窗口中打开新的URL(既不在默认系统浏览器中也不在同一webview中)。我设置了我自己的WebViewClient和WebChromeClient,如下所示,

public class MyWebViewClient extends WebViewClient {  
    @Override
    public boolean shouldOverrideUrlLoading (WebView view, String url) {
        view.loadUrl(url);        
        return true;
    }
}

public class MyWebChromeClient extends WebChromeClient {
    @Override
    public boolean onCreateWindow (WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
        WebView childView = new WebView(view.getContext());
        final WebSettings settings = childView.getSettings();
        settings.setJavaScriptEnabled(true);
        childView.setWebChromeClient(this);
        childView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(childView);
        resultMsg.sendToTarget();
        Log.d(LOG_TAG, "onCreateWindow");   // never log
        return true;
    }
}

我也确实将 webview setSupportMultipleWindows设为true
但是,onCreateWindow从未被调用过。我错过了什么吗? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

您是否告诉“父”网页视图允许多个窗口?

WebView parentWebview = (WebView) findViewById(R.id.parent_webview);
// ...
parentWebview.getSettings().setSupportMultipleWindows(true);

这是我见过的最常见的错误。

答案 1 :(得分:0)

如果没有完整的代码,很难说为什么没有调用OnCreateWindow()。在您的活动OnCreate()方法中,您是否有类似以下的代码?

    // Get the main web viewer
    mWebView = (WebView) findViewById(R.id.webViewer);

    // Enable Javascript
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    // Set WebViewClient and WebChromClient
    mWebView.setWebViewClient(new MyWebViewClient());
    mWebView.setWebChromeClient(new MyWebChromeClient());

另外,您使用的是哪种代码,您认为应该调用OnCreateWindow()

答案 2 :(得分:0)

将此行添加到代码中以调用onCreateWindow() 。webView.getSettings()setSupportMultipleWindows(真);