上篇介紹了一些WebView的設置,本篇爲一些補充項。html
首先加載HTML5的頁面時,會出現頁面空白的現象,緣由是須要開啓 DOM storage API 功能:java
webSettings.setDomStorageEnabled(true);
其次,開發中須要注意的安全漏洞,詳見《如何設計一個優雅健壯的Android WebView》:web
@TargetApi(11) private static final void removeJavascriptInterfaces(WebView webView) { try { if (Build.VERSION.SDK_INT >= 11 && Build.VERSION.SDK_INT < 17) { webView.removeJavascriptInterface("searchBoxJavaBridge_"); webView.removeJavascriptInterface("accessibility"); webView.removeJavascriptInterface("accessibilityTraversal"); } } catch (Throwable tr) { tr.printStackTrace(); } }
第三,其餘須要注意的點:緩存
// Enable Javascript WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setAllowFileAccess(false); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { webSettings.setAllowFileAccessFromFileURLs(false); } webSettings.setSavePassword(false);
if (NetWorkDetector.isConnected(this.getActivity())) { // 根據cache-control決定是否從網絡上取數據。 webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); } else { // 沒網,則從本地獲取,即離線加載 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); } // 開啓 DOM storage API 功能 webSettings.setDomStorageEnabled(true); // 開啓 database storage API 功能 webSettings.setDatabaseEnabled(true); // 開啓 Application Caches 功能 webSettings.setAppCacheEnabled(true); // 設置 Application Caches 緩存目錄 webSettings.setAppCachePath(this.getActivity().getDir("appcache", MODE_PRIVATE ).getPath());
5.1以上默認禁止了https和http混用,如下方式是開啓安全
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); }
@Override protected void onDestroy() { if (mWebView != null) { mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); mWebView.clearHistory(); ((ViewGroup) mWebView.getParent()).removeView(mWebView); mWebView.destroy(); mWebView = null; } super.onDestroy(); } 做者:Carson_Ho 連接:https://www.jianshu.com/p/3c94ae673e2a 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。