Android WebView H5開發拾遺

上篇介紹了一些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();
		}
	}

 

第三,其餘須要注意的點:緩存

  1. 需不需開啓JS,以及是否容許文件訪問、保存密碼:
    		// 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);
    

      

  2. 緩存相關:
    		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());
    

     

  3.  5.1以上默認禁止了https和http混用,如下方式是開啓安全

    		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    			webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    		}
    

      

  4. 在 Activity 銷燬( WebView )的時候,先讓 WebView 加載null內容,而後移除 WebView,再銷燬 WebView,最後置空:
    @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
    來源:簡書
    著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。  
相關文章
相關標籤/搜索