三年后,我回答自己的问题:
当在网页中点击一个链接时,根据网页实现的不同,有两种可能的情况:
1)链接将在同一窗口中打开。
2)链接将在新窗口中打开。
对于第一个情况,可以使用以下代码轻松处理:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
在WebViewClient实现中覆盖shouldOverrideUrlLoading方法将在同一窗口中打开链接。
现在让我们看看第二种情况,即网页请求在新窗口中打开链接的URL。对于这种情况,我们需要告诉我们的WebView支持多个窗口,像下面这样:
webView.getSettings().setSupportMultipleWindows(true)
然后向Webview添加一个新的Web Chrome客户端,以便在网页请求新窗口时获取事件。
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onCreateWindow(WebView view, boolean isDialog,
boolean isUserGesture, Message resultMsg) {
WebView newWebView = new WebView(WebpageActivity.this);
newWebView.getSettings().setJavaScriptEnabled(true);
newWebView.getSettings().setSupportZoom(true);
newWebView.getSettings().setBuiltInZoomControls(true);
newWebView.getSettings().setPluginState(PluginState.ON);
newWebView.getSettings().setSupportMultipleWindows(true);
view.addView(newWebView);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget();
newWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
return true;
}
}
});
干杯!!!
resultMsg.obj
转换为WebView.WebViewTransport
,这让我无法得出结论。这里的文档应该更清晰明了。 - davejoem