1

我有一些逻辑,我希望我的 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()加载新网址时调用。这就是我要触发的事件)

REF:Android 的官方 WebView 文档

4

2 回答 2

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");
于 2018-09-13T05:11:07.237 回答
0

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

shouldOverrideUrlLoading(WebView view, WebResourceRequest request)

检查你的功能和版本

于 2018-09-13T03:54:18.857 回答