gpt4 book ai didi

Android Web View - 不调用 shouldoverrideurlloading

转载 作者:行者123 更新时间:2023-11-29 20:51:46 25 4
gpt4 key购买 nike

我正在使用 android web View 加载 url。它工作正常,但问题是网页内的某些链接 (target=_blank) 未打开默认方式。我调试项目并发现这些链接没有调用 webviewclient() 中的 shouldoverrideurlloading() 方法。

这是webviewclient,

public class MyWebClient extends WebViewClient {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;

}
}

最佳答案

这是因为此类链接会触发弹出窗口的打开(新选项卡,如果您在浏览器中)。默认情况下,在 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());

关于Android Web View - 不调用 shouldoverrideurlloading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28969338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com