Webview shouldOverrideUrlLoading无法捕获URL请求

时间:2019-02-18 16:52:18

标签: android caching webview android-webview webviewclient

我正在尝试解析每个click事件,拦截试图加载到Webview中的http url,并根据该url解析的逻辑集决定是否显示它。我遵循了以下3个StackOverflow链接的建议:

1)Intercept and override HTTP requests from WebView

2)Android Web-View shouldOverrideUrlLoading() Deprecated.(Alternative)

3)https://stackoverflow.com/a/32711309/2480714

没有解决我的问题。主要问题是用户单击Web视图以加载超链接,并且似乎每次未调用 shouldOverrideUrlLoading 方法或未正确拦截url。

我创建了Custom WebViewClient并首先覆盖了它,目的是在未经我批准的情况下停止所有加载,但是遇到了麻烦。 一些网址正在加载并绕过我的覆盖方法,有些则没有。我不知道为什么会这样。

这是我的WebviewClient类:

public class CustomWebViewClient2 extends WebViewClient {

    public CustomWebViewClient2(){

    }

    @Override
    public void onPageFinished(WebView view, String url) {
        Log.d("log", "(CustomWebViewClient) onPageFinished, URL == " + url);
    }


    @SuppressLint("NewApi")
    @Nullable
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        Log.d("log", "shouldInterceptRequest hit");
        return null;
    }

    @Nullable
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
        Log.d("log", "shouldInterceptRequest hit");
        return null;
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        Log.d("log", "(CustomWebViewClient) shouldOverrideUrlLoading");
        return true;
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d("log", "(CustomWebViewClient) shouldOverrideUrlLoading");
        return true;
    }


    @Override
    public void onLoadResource(WebView view, String url) {
        Log.d("log", "intercepting onLoadResource, url == " + url);
    }


    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        Log.d("log", "onPageStarted url == " + url);
    }
}

如您所见,它覆盖了正确的方法,并且(理论上)应该从不加载URL,除非我将其传递给Webview进行加载,但不幸的是某些网站正在加载,而另一些网站正在加载不是。

我还尝试根据以下答案之一中的注释禁用缓存:

  

“小心!如果您拦截浏览器的尝试   检索图像(或可能的任何资源),然后返回null   (意味着让WebView继续检索图像),将来   对此资源的请求可能只是进入缓存,而不会   触发shouldInterceptRequest()。如果您想截取每个图像   请求,您需要禁用缓存或(我所做的)调用   WebView.clearCache(true)“

但无济于事。为什么有些URL会加载并绕过替代,而另一些却没有?

更新1 :这是一个示例URL https://cookpad.com/us,反映了我所指的问题。它似乎与在服务器端实现的Turbolinks有关。

0 个答案:

没有答案