我使用Android网页视图加载网址。它的工作正常,但问题是网页内部的一些链接(target = _blank)没有打开默认方式。我调试项目,发现这些链接没有在webviewclient()中调用shouldoverrideurlloading()方法。
这是webviewclient,
public class MyWebClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
答案 0 :(得分:1)
这是因为此类链接会触发弹出窗口的打开(如果您在浏览器中,则会显示新选项卡)。默认情况下,在WebView中禁用打开弹出窗口。查看http://developer.android.com/reference/android/webkit/WebSettings.html#setSupportMultipleWindows(boolean)
您必须为主WebView设置WebChromeClient,然后提供一个空的新WebView,用于打开弹出窗口的内容。
这是您需要做的事情的本质:
webView.getSettings().setSupportMultipleWindows(true);
webView.setWebChromeClient(new WebChromeClient {
@Override
public boolean onCreateWindow(WebView view, boolean isDialog,
boolean isUserGesture, Message resultMsg) {
// Create a WebView
WebView popupWebView = new WebView(view.getContext());
// TODO: Put WebView into your view hierarchy, if needed.
//
// This is needed to open the url in the WebView.
// Without the client, WebView will try to start a browser.
popupWebView.setWebViewClient(new WebViewClient());
WebView.WebViewTransport transport =
(WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(popupWebView);
resultMsg.sendToTarget();
return true;
}
});
如果您还希望处理关闭弹出窗口,此答案包含更多代码:How to handle facebook like with confirm in android webview
顺便说一下,如果你只想在WebView中打开链接,就没有必要覆盖shouldOverrideUrlLoading
,只需设置WebViewClient即可:
webView.setWebViewClient(new WebViewClient());
答案 1 :(得分:0)
这种方法没用。 它只会加载url并始终返回TRUE布尔值。
试试这个
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setDomStorageEnabled(true);
webView.loadUrl("url");
答案 2 :(得分:0)
我发现,如果您使用的是iframe
,则不会触发shouldOverrideUrlLoading()
外部链接,除非您添加target="_top"
(我没有尝试target="_blank"
)
以下JavaScript代码将此目标属性添加到每个链接。
function change_links_target()
{
var all_document_links = mFrameDocument.getElementsByTagName("a");
for (i = 0; i < all_document_links.length; i++){
all_document_links[i].setAttribute("target", "_top");
}
}