WebView的WebSettings配置

private void initWebSettings() {
    WebSettings settings = mWvShow.getSettings();
    //支持获取手势焦点
    mWvShow.requestFocusFromTouch();
    //支持JS
    settings.setJavaScriptEnabled(true);
    //支持插件
    settings.setPluginState(WebSettings.PluginState.ON);
    //设置适应屏幕
    settings.setUseWideViewPort(true);
    settings.setLoadWithOverviewMode(true);
    //支持缩放
    settings.setSupportZoom(true);
    //隐藏原生的缩放插件
    settings.setDisplayZoomControls(false);
    //支持内容重新布局
    settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
    settings.supportMultipleWindows();
    settings.setSupportMultipleWindows(true);
    //设置缓存模式
    settings.setDomStorageEnabled(true);
    settings.setDatabaseEnabled(true);
    settings.setCacheMode(WebSettings.LOAD_DEFAULT);
    settings.setAppCacheEnabled(true);
    settings.setAppCachePath(mWvShow.getContext().getCacheDir().getAbsolutePath());
    
    //设置可访问文件
    settings.setAllowFileAccess(true);
    //webview调用requestFocus时为webview设置节点
    settings.setNeedInitialFocus(true);
    //支持自动加载图片
    if (Build.VERSION.SDK_INT >= 19) {
        settings.setLoadsImagesAutomatically(true);
    } else {
        settings.setLoadsImagesAutomatically(false);
    }
    settings.setNeedInitialFocus(true);
    //设置编码格式
    settings.setDefaultTextEncodingName("UTF-8");
    
}
### WebView 容错配置方法 对于 `WebView` 的容错处理,可以通过多种方式来增强其稳定性和可靠性。以下是几种常见的做法: #### 设置错误页面 当加载网页失败时,可以自定义显示给用户的错误页面。 ```java webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); // 显示友好的错误提示信息或本地缓存的内容 webView.loadUrl("file:///android_asset/error.html"); } }); ``` #### 启用JavaScript支持并优化网络请求超时时间 为了提高用户体验,在遇到脚本执行问题或其他异常情况时应适当调整参数设置。 ```java WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); // 开启JS解析能力 // 增加DNS预取功能以加快访问速度 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { settings.setPreventSavePassword(false); } // 调整超时时长 System.setProperty("http.keepAlive", "false"); ConnectionManager.setDefaultSocketFactory(SSLSocketFactory.getDefault()); HttpURLConnection connection = null; try { URL url = new URL("https://example.com/"); connection = (HttpURLConnection)url.openConnection(); connection.setRequestProperty("Connection","close"); } catch(Exception e){ Log.e("HTTP_ERROR",e.toString()); } finally{ if(connection !=null )connection.disconnect(); } ``` #### 处理证书验证失败的情况 有时由于SSL/TLS协议版本不匹配等原因可能导致连接不上服务器,这时可通过修改信任库实现更宽松的安全策略(仅限于开发调试阶段),生产环境需谨慎对待安全风险。 ```java TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager(){ public java.security.cert.X509Certificate[] getAcceptedIssuers(){return null;} public void checkClientTrusted(java.security.cert.X509Certificate[] certs,String authType){} public void checkServerTrusted(java.security.cert.X509Certificate[] certs,String authType){} }}; SSLContext sc=null; try{ sc= SSLContext.getInstance("TLSv1.2"); }catch(NoSuchAlgorithmException ex){ex.printStackTrace();} sc.init(null,trustAllCerts,new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HostnameVerifier hv=new HostnameVerifier(){ @Override public boolean verify(String hostname,SSLSession session){ return true; // 不做主机名校验 }}; HttpsURLConnection.setDefaultHostnameVerifier(hv); // 注意:以上代码片段适用于特定场景下的测试用途,请勿直接应用于实际项目中,以免造成安全隐患。 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值