gpt4 book ai didi

android - 如何使链接在 webview 中打开或默认浏览器打开取决于域名?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:48:28 25 4
gpt4 key购买 nike

我有 WebView,我想在 WebView 中打开属于域 www.example.org 的链接,而所有其他链接(如果单击)由我的应用程序之外的默认浏览器打开。

我尝试使用 public boolean shouldOverrideUrlLoading(WebView view, String url) 但它不能正常工作。

这是不起作用的代码:

public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try {
URL urlObj = new URL(url);
if (urlObj.getHost().equals("192.168.1.34")) {
view.loadUrl(url);
return true;
} else {
view.loadUrl(url);
return false;
}
} catch (Exception e) {

}
}
}

在这两种情况下(返回 true 和返回 false),URL 都由我的应用程序处理。

最佳答案

一旦您创建了一个 WebViewClient 并将其附加到您的 WebView,您就已经覆盖了 Android 允许 ActivityManager 将 URL 传递给浏览器的默认行为(这仅未在 View 上设置客户端时发生),请参阅 the docs on the method for more .

一旦你附加了一个 WebViewClient,返回 false 形式的 shouldOverrideUrlLoading() 将 url 传递给 WebView,同时返回 true 告诉 WebView 什么都不做......因为你的应用程序会处理它。不幸的是,这些路径都不会导致 Android 将 URL 传递给浏览器。这样的事情应该可以解决您的问题:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try {
URL urlObj = new URL(url);
if( TextUtils.equals(urlObj.getHost(),"192.168.1.34") ) {
//Allow the WebView in your application to do its thing
return false;
} else {
//Pass it to the system, doesn't match your domain
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
//Tell the WebView you took care of it.
return true;
}
}
catch (Exception e) {
e.printStackTrace();
}
}

我知道这似乎有点违反直觉,因为您会期望 return false; 完全绕过 WebView,但是一旦您使用自定义 WebViewClient.

希望对您有所帮助!

关于android - 如何使链接在 webview 中打开或默认浏览器打开取决于域名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4907045/

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