ホームページ > 記事 > ウェブフロントエンド > Android Webview は、外部 html_html/css_WEB-ITnose をロードするときに、ローカルの js、css、およびその他のリソース ファイルをロードすることを選択します。
WebView を使用して Web ページを読み込む場合、js jquery パッケージ、CSS、画像、その他のリソースなどの比較的大きなリソース ファイルがいくつかあります。これらをネットワークから直接読み込むと、ページの読み込みが遅くなり、より多くの時間を消費します。したがって、これらのファイルはアセットに配置し、アプリにパッケージ化する必要があります。
この問題を解決するには、API 11 (HONEYCOMB) で提供される shouldInterceptRequest(WebView view, String url) 関数を使用してローカル リソースをロードする必要があります。 API 21 では、このメソッドは非推奨となり、新しい shouldInterceptRequest がオーバーロードされ、url が request に置き換えられました。
たとえば、アセットに配置された画像 icon.png があり、外部 HTML が読み込まれている場合、アセット内の画像をネットワークから再取得することなく、直接取り出して読み込む必要があります。もちろん、HTML 内の画像リンクを file:///android_asset/icon.png に変更することはできますが、その場合、この HTML は Android、iOS、および WAP で共有できません。
実装コード:
webView.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { WebResourceResponse response = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ response = super.shouldInterceptRequest(view,url); if (url.contains("icon.png")){ try { response = new WebResourceResponse("image/png","UTF-8",getAssets().open("icon.png")); } catch (IOException e) { e.printStackTrace(); } } }// return super.shouldInterceptRequest(view, url); return response; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { WebResourceResponse response = null; response = super.shouldInterceptRequest(view, request); if (url.contains("icon.png")){ try { response = new WebResourceResponse("image/png","UTF-8",getAssets().open("icon.png")); } catch (IOException e) { e.printStackTrace(); } } return response; }}