如何在WebView Android中过滤手机和其他Web链接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在WebView Android中过滤手机和其他Web链接相关的知识,希望对你有一定的参考价值。
我想要的是在网页视图中保留链接,只要它们是网站的一部分,但外部链接应该启动到外部网络浏览器。另外在网站上我有电话链接的电话:555-323-2323,如果我使用电话号码下面的代码工作并启动手机应用程序但外部链接无法正常工作。
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
if (url.contains("tel:")) {
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
return true;
} else {
return true;
}
if (Uri.parse(url).getHost().equals("www.example.com")) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
答案
事情不起作用的主要原因是因为你有一个if-else而且两个分支都返回true。 else语句之后的所有代码都无法访问。删除else语句或更改该逻辑。
另一答案
- 删除第一个语句(
view.loadUrl(url)
)。 - 删除
else
第一个条件的一部分。
您的代码看起来像这样:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("tel:")) {
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
return true;
}
if (Uri.parse(url).getHost().equals("www.example.com"))
// This is my web site, so do not override; let my WebView load the page
return false;
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent);
return true;
}
另一答案
我使用这个解决方案:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("tel:")) {
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
return true;
}
if (Uri.parse(url).getHost().equals(URL)) {
// This is my web site, so do not override; let my WebView load the page
return super.shouldOverrideUrlLoading(view, url);
}
return super.shouldOverrideUrlLoading(view, url);
}
以上是关于如何在WebView Android中过滤手机和其他Web链接的主要内容,如果未能解决你的问题,请参考以下文章