0
  1. In my Android Application I have used WebView to show banners.
  2. There is number of URLs inside banner layout, but no URL to .../favicon.ico
  3. WebView automatically try to load favicon.ico based on my base URL + /favicon.ico, gets response 404 and do not loads recent RULs

If important:

  • base URL starts from https://...
  • response uses SSL certificate
  • response has additiohal headers for authorization

It is possible to prevent WebView from loading favicon or allow it to load other links after getting 404 response?

    webView.setWebViewClient(new WebViewClient() {

        ...@Override onReceivedError...

        @SuppressWarnings("deprecation")
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
            return getNewResponse(url);
        }

        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
            String url = request.getUrl().toString();
            return getNewResponse(url);
        }

        private WebResourceResponse getNewResponse(String url) {

            try {
                OkHttpClient client = MyOkHttpClient.getInstance();

                Request.Builder requestBuilder = new Request.Builder();
                requestBuilder.url(url.trim())
                        .addHeader("api-key", Constants.API_KEY)
                        .addHeader("platform", Constants.PLATFORM);

                Request request = requestBuilder.build();

                Response response = client.newCall(request).execute();

                return new WebResourceResponse(
                        getMimeType(url),
                        response.header("content-encoding", "utf-8"),
                        response.body().byteStream()
                );

            } catch (Exception e) {
                return null;
            }

        }

        private String getMimeType(String url) {
            ...
            return type;
        }

    });
  • Possible duplicate of [Disable Android WebView/WebViewClient Initiated favicon.ico Request](https://stackoverflow.com/questions/34886582/disable-android-webview-webviewclient-initiated-favicon-ico-request) – marmor Aug 08 '17 at 09:45

1 Answers1

0

Yes you can do that.But it can't be work on pre lollipop devices. First create a dummy icon which is invisible and paste that icon in your assets folder.Now put the below code whenever you got the favicon you can show it and when not then your asset folder load dummy icon.

@Override
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("dummyfavicon.ico")));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}
Andy Developer
  • 3,071
  • 1
  • 19
  • 39