射击shouldOverrideUrlLoading()

时间:2013-10-04 11:21:39

标签: android webview

我有一些逻辑,每当我尝试更改其URL时,我都希望我的WebView应用。对于加载页面中的链接,没问题,我可以通过在自定义WebViewClient上使用shouldOverrideUrlLoading方法来实现。

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

有没有办法手动“预加载”网址,以便调用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()。这就是我想要触发的事件。

参考:Android's official WebView documentation

2 个答案:

答案 0 :(得分:0)

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

shouldOverrideUrlLoading(WebView view, WebResourceRequest request)

检查功能和版本

答案 1 :(得分:0)

如果您要做的只是重复使用逻辑,只需将其提取到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");