禁用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