//這個Java Bridge是WebView本身添加的 //在Api 17之前,javascript能夠經過java對象進行反射,執行一些不安全的操做 webView.removeJavascriptInterface("searchBoxJavaBridge_");
//設置支持javascript,默認是false WebSettings.setJavaScriptEnabled(true);
//使WebView支持經過手勢或者縮放控制器來縮放頁面,默認是true //該設置不影響 WebView.zoomIn()和WebView.zoomOut() WebSettings.setSupportZoom(true); //設置使用默認的縮放控制器,默認是false WebSettings.setBuiltInZoomControls(true); //不顯示默認的+/-縮放控制View, 默認是true WebSettings.setDisplayZoomControls(false);
//設置是否自動加載圖片,默認是`true`,若是設置爲`false`,那麼全部圖片都不會被加載,包括本地圖片. WebSettings.setLoadsImagesAutomatically(true); //設置是否阻止加載網絡圖片,默認是`false`,若是設置爲`true`,那麼網絡圖片將不會加載.(能夠先設置爲true,而後再設置爲false,來加快頁面加載速度) WebSettings.setBlockNetworkImage(false); //設置是否阻止加載網絡資源(不單單是圖片),默認是`false`,若是設置爲`true`,那麼網絡上的js,css,圖片等資源都不會加載 WebSettings.setBlockNetworkLoads(false);
//設置渲染線程的優先級 //該方法在 Api 18以後被廢棄,優先級由WebView本身管理 //不過任然建議將其設置爲 HIGH,來提升頁面渲染速度 WebSettings.setRenderPriority(RenderPriority.HIGH);
//設置使用 寬 的Viewpoint,默認是false //Android browser以及chrome for Android的設置是`true` //而WebView的默認設置是`false` //若是設置爲`true`,那麼網頁的可用寬度爲`980px`,而且能夠經過 meta data來設置 //若是設置爲`false`,那麼可用區域和WebView的顯示區域有關. WebSettings.setUseWideViewPort(true); //若是webview內容寬度大於顯示區域的寬度,那麼將內容縮小,以適應顯示區域的寬度, 默認是false WebView.setLoadWithOverviewMode(true);
<!--若是WebSettings.getUseWideViewPort 是true, 那麼能夠經過meta來設置 Viewport --> <!--例如將其可用寬度設置爲 480px, 而且禁用縮放功能--> <head> <meta name="viewport" content="width=480, user-scalable=no" /> </head> <!--若是WebSettings.getUseWideViewPort 是false, 那麼 不能 經過meta來設置--> 其效果相似於: <meta name="viewport" content="width=device-width"/>
注意: 這裏的px和一般說的像素不一樣,他和dp的概念很是相似. 參見 Mozillajavascript
//支持H5的 application cache 的功能 WebSettings.setAppCacheEnabled(true); //設置 application cache 的存儲路徑(一般存儲js,css,圖片等) WebSetting.setAppCachePath("xxx"); //支持 H5 的session storage和local storage WebSettings.setDomStorageEnabled(true); //支持javascript讀,寫db WebSettings.setDatabaseEnabled(true); //設置js建立的db文件的路徑, Api 19之後廢棄,直接有webview管理 WebSettings.setDatabasePath("xxx");
//設置加載資源時,如何使用cache //默認設置是:WebSettings.LOAD_DEFAULT //當WebView正常加載一個頁面時,若是緩存命中且沒有過時,則使用緩存數據,不然從網絡加載,當WebView.goBack()時,若是緩存命中,直接使用,不會驗證是否過時 //可用的其餘設置:LOAD_CACHE_ELSE_NETWORK, LOAD_NO_CACHE, LOAD_CACHE_ONLY WebSettings.setCacheModel(WebSettings.LOAD_DEFAULT);
public static void synCookies(Context context, String url) { CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true);//默認就是true cookieManager.setCookie(url, cookies); if(Build.VERSION.SDK_INT < 21) { CookieSyncManager.createInstance(context).sync(); } else { cookieManager.flush(); } }