【问题标题】:Firing shouldOverrideUrlLoading()触发 shouldOverrideUrlLoading()
【发布时间】:2018-09-13 13:11:07
【问题描述】:

我有一些逻辑,我希望我的 WebView 在我尝试更改其 url 时应用。对于加载页面中的链接,这很好,我可以通过在我的自定义 WebViewClient 上使用 shouldOverrideUrlLoading 方法来完成。

但是当我在我的 WebView 上显式调用 loadUrl 时,shouldOverrideUrlLoading 不会被触发(显然,从这个方法中调用 loadUrl 时会产生无限循环)。

有没有办法手动“预加载”一个 url 以便调用 shouldOverrideUrlLoading 方法?

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

        if(url.startsWith("myapp://")
        {
                //Do something
        }
        else {
                view.loadUrl(url);
        }
        return true;
        }

当我从呈现的页面中单击链接时,这可以正常工作。但如果我打电话:

mWebView.loadUrl("myapp://whatever");

shouldOverrideUrlLoading() 未被调用。我要问的是是否有一种方法可以将 url 传递给我的 webView,以便在实际加载之前将其传递给 shouldOVerrideUrlLoading()。 (即 shouldOVerrideUrlLoading() 每当要加载新的 url 即将时调用。这就是我要触发的事件)

参考号:Android's official WebView documentation

【问题讨论】:

  • 你需要什么 1st webview.loadurl(URL);还是应该OverrideLoading?
  • 每当我需要手动更改 webview 的 url 时,我想利用我的 shouldOverrideUrlLoading 逻辑,而不必复制代码。
  • 张贴您的代码 sn-p 以便更好地理解
  • 我试图澄清一点,但实际上没有我可以发布的代码。
  • @Gabriel 你有没有找到一个优雅的解决方案?现在我持有对客户的引用并调用(!client.shouldOverrideUrlLoading()) { view.loadUrl(url); } 而不是view.loadUrl(url)

标签: android webview


【解决方案1】:

如果您的应用版本大于“N”,您应该使用此功能

shouldOverrideUrlLoading(WebView view, WebResourceRequest request)

检查你的功能和版本

【讨论】:

    【解决方案2】:

    如果您只想重用您的逻辑,只需将其提取到您的 WebViewClient 中并使用它来加载 url,然后在 shouldOverrideUrlLoading() 中委托给它:

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return loadUrl(view, url);
    }
    
    public boolean loadUrl(WebView view, String url) {
        if(url.startsWith("myapp://")
        {
            //Do something
        }
        else {
           view.loadUrl(url);
        }
        return true;
    }
    

    然后代替

    mWebView.loadUrl("myapp://whatever");
    

    你这样做:

    mWebViewClient.loadUrl(mWebView, "myapp://whatever");
    

    【讨论】:

      猜你喜欢
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 2019-09-19
      • 2013-05-16
      • 2017-02-20
      • 2019-05-16
      相关资源
      最近更新 更多