如何在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链接的主要内容,如果未能解决你的问题,请参考以下文章

Android WebView 加载超长 JS 数据

如何及时清理Android里WebView的内存,尤其是大量图片的内存

Android APP之WebView如何校验SSL证书

Android APP之WebView如何校验SSL证书

Android WebView VS 手机浏览器

Android中Http加载如何得到Cookie和 WebView 加载网页如何得到的Cookie