2017-04-18 5 views
0
  1. In meiner Android-Anwendung habe ich WebView verwendet, um Banner anzuzeigen.
  2. Es Anzahl der URLs innerhalb Banner Layout, aber keine URL zu .../favicon.ico
  3. WebView automatisch versuchen favicon.ico zu laden basiert auf meiner Basis-URL + /favicon.ico, bekommt Antwort 404 und tun nicht den letzten RULs Lasten

Wenn wichtig:Wie WebView zu deaktivieren favicon.ico laden (d. H. Spezifische URL)?

  • Basis-URL beginnt mit https: // ...
  • Antwort verwendet SSL-Zertifikat
  • Antwort additiohal Header für die Zulassung

Es ist möglich, zu verhindern WebView von Laden Faviconodererlauben es andere Verbindungen nach dem Aufstehen 404 Antwort zu laden hat?

webView.setWebViewClient(new WebViewClient() { 

     [email protected] 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; 
     } 

    }); 
+0

Mögliche Duplikat [Deaktivieren Android WebView/WebViewClient Initiiert favicon.ico Request] (https://stackoverflow.com/questions/34886582/disable-android-webview-webviewclient-initiated-favicon-ico-request) – marmor

Antwort

0

Ja, Sie können das tun.Aber es kann nicht auf Pre-Lollipop-Geräten arbeiten. Erstellen Sie zunächst ein Dummy-Symbol, das unsichtbar ist, und fügen Sie dieses Symbol in Ihren Assets-Ordner ein.Nun setzen Sie den folgenden Code, wann immer Sie das Favicon erhalten haben, und wenn nicht, dann lädt Ihr Asset-Ordner Dummy-Symbol.

@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; 
} 
Verwandte Themen