2017-04-18 115 views
0
  1. 私のAndroidアプリケーションでは、WebViewを使用してバナーを表示しています。
  2. バナーレイアウト内のURLの数があり
  3. が、なしURLに.../favicon.icoを
  4. のWebView が自動的が私のベースURL + /favicon.icoに基づいてfavicon.icoをロードしようとし、取得します応答404とやるない負荷最近RULsは

重要な場合:WebViewの読み込みを無効にする方法favicon.ico(具体的なURL)?

  • ベースURLがHTTPSから開始します:// ...
  • 応答が
  • 応答が承認

それはロードファビコンからWebViewのを防ぐまたはが、それは404応答を取得した後、他のリンクをロードさせることが可能であるためadditiohalヘッダを持つSSL証明書を使用していますか?

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

(https://stackoverflow.com/questions/34886582/disable-android-webview-webviewclient-initiated-favicon-ico-request)無効のAndroidのWebView/WebViewClientがfavicon.icoを要求を開始]の可能な重複 – marmor

答えて

0

はい、あなたはそれを行うことはできますが、それは前のロリポップデバイスでは機能しません。 最初に目に見えないダミーアイコンを作成し、そのアイコンをアセットフォルダーに貼り付けます。faviconを表示すると次のコードを表示します。

@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; 
} 
関連する問題