我正在尝试使用androidcustom browser(sdk 2.3.3)开发一个WebViewAPI level 10,不幸的是,我不知道如何拦截来自webpage的请求以在新的浏览器窗口中打开url,比如点击target="_blank"的链接。
根据API Doc我重写了onCreateWindowWebChromeClient,但在点击这样的链接时不调用。可能是这个api级别的bug?我还覆盖了shouldOverrideUrlLoading以避免WebView在内置浏览器中打开后续链接。
这是我打开google.com的示例代码。要测试它,请轻按“新闻”,然后轻按任何新闻标题。Android内置浏览器通常会在新的browser window中打开它。
ojit_pre

最佳答案

确保将supportmultiplewindows设置为true。没有它,webchromeclient的oncreatewindow将永远不会被调用。

WebSettings settings = webView.getSettings();
settings.setSupportMultipleWindows(true);

然后注册WebChromeClient并覆盖onCreateWindow
 webView.setWebChromeClient(new WebChromeClient() {
        @Override public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg)
        {
            WebView newWebView = new WebView(getContext());
            addView(newWebView);
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(newWebView);
            resultMsg.sendToTarget();
            return true;
        }
    });

08-16 14:52