我正在尝试使用androidcustom browser
(sdk 2.3.3)开发一个WebView
的API level 10
,不幸的是,我不知道如何拦截来自webpage
的请求以在新的浏览器窗口中打开url,比如点击target="_blank"
的链接。
根据API Doc
我重写了onCreateWindow
的WebChromeClient
,但在点击这样的链接时不调用。可能是这个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;
}
});