//这个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(); } }