Android webview url重定向,一直循环执行shouldOverrideUrlLoading的代码,是什么原因

现象:
Android的webview在加载一个url时,会循环执行shouldOverrideUrlLoading方法里的逻辑代码
代码:

    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
          doSomething();
          // 没有view.loadurl
          return true;
    }

运行结果:可以看到shouldOverrideUrlLoading方法里的log循环输出
想问一下这是什么原因

你return false;试试

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/218691
  • 除此之外, 这篇博客: webview中shouldOverrideUrlLoading方法解析中的 应用场景 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1、拦截要跳转的URL,判断是使用当前webview打开还是使用浏览器打开

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url != null && url.startsWith("geo")) { // 添加url判断
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri
                    .parse(url));
            mContext.startActivity(intent);
            return true;
        }
        return false;
    }
    

    2、安全校验,可以设置黑白名单判断是否允许该链接被打开

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url != null && !url.startsWith("geo")) { // 添加url判断
            return true;
        }
        return false;
    }
    

    3、电话或者邮件拦截

     <a href="tel:15990966490">打电话</a>
    

    调用打电话功能:

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
       if (url != null && url.startsWith("tel:")) { // 添加url判断
           Intent intent = new Intent(Intent.ACTION_CALL);
           Uri data = Uri.parse(url);
           intent.setData(data);
           mContext.startActivity(intent);
           return true;
       }
       return false;
    }
    

    4、判断是否是重定向URL

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
      isRedirect = true;
      return false;
    }