其他分享
首页 > 其他分享> > 禁用Android WebView / WebViewClient启动的favicon.ico请求

禁用Android WebView / WebViewClient启动的favicon.ico请求

作者:互联网

调用WebView.loadUrl()时,如何禁止Android WebView / WebViewClient发送对favicon.ico的请求?我可以看到在通过CharlesProxy分析请求时进行的呼叫.

我不拥有要在WebView中显示的HTML内容.我的研究从服务器方面获得了许多变通办法的结果,但这些对我不起作用.

解决方法:

我通过一点技巧实现了这一目标.首先,我创建了一个伪造的1×1图标文件,并将其保存到资产文件夹中.然后,我覆盖了WebViewClient’s shouldInterceptRequest()方法,在该方法中,我检查URL是否是对favicon文件的请求,在这种情况下,请使用InputStream返回WebResourceResponse,其中包含我们的假图标:

    @Override
    @CallSuper
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        if(!request.isForMainFrame() && request.getUrl().getPath().equals("/favicon.ico")) {
            try {
                return new WebResourceResponse("image/png", null, new BufferedInputStream(view.getContext().getAssets().open("empty_favicon.ico")));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

请注意,不得在我们的代码中关闭InputStream,因为WebView随后会使用它来读取图标. WebviewClient必须通过其设置器设置为WebView:

mWebView.setWebViewClient(subclassedWebViewClient);

标签:android,android-webview,favicon,webviewclient
来源: https://codeday.me/bug/20191010/1887901.html