admin管理员组文章数量:1635850
前瞻
WebView在loadUrl的时候,可能会出现网页打不开的问题,这种问题网上一搜一大把,但是可能看了一圈下来没有你想要的答案,或许有一种可能是你平时OkHttp请求没有忽略却在配置WebView的时候忽略了,急性子请直接看文末。
起因
本人在替换x5WebView的时候遇到了这个问题,其中这是第二次替换了,第一次替换完全没有遇到任何阻碍,如果有同学在遇到了一些配置上的问题,可以去腾讯浏览服务查看步骤传送门
本人遇到的问题如图所示,并且本人试了直接加载百度首页,也是打不开的!
过程
网上有人说是android:networkSecurityConfig=""没有配置的问题,那当然不是,因为这些配置都是之前就配好的,并不是我从头开始写的这个项目,只是拿过来维护修改而已。循着这个思路,我仔细对比了网上说的一些WebView配置问题,这些大差不差,domStorageEnabled = true是肯定设置了的,那些关键配置一个没少,那可能是什么原因呢?
我在替换过程中是自己重新写了一个WebView基类,也没有看以前的代码,索性拿过来翻了翻,发现自己少重写了一个方法,这个方法在替换x5WebView已经WebView基本设置里都没有看到啊,但是自己想了想,发送网络请求的过程中确实会遇到这个问题,就是onReceivedSslError()方法,新建WebViewClient没有重写这个方法!可能我们在做demo的时候也没有重写但是并没有问题,但是对于成品项目中,这个方法不重写处理一下的话,应该都是通过不了的吧。
Android应用中WebView访问https SSL证书网页时,Google Play 总是报 WebView 的 onReceivedSslError 错误(ERR_SSL_PROTOCOL_ERROR )。为避免谷歌安全警告,要重写WebView的onReceivedSslError方法,此时要弹框提示用户,是否忽略SSL错误,继续访问网页。
百度如是说。
具体做法可见这位老哥写的,还是很清楚的传送门
具体自己怎么做就看各位的做法了,我这里肯定是直接SslErrorHandler.proceed了,没有什么其他要处理的地方了
处理办法
重写WebView中设置的WebViewClient的onReceivedSslError()方法。忽略ssl证书错误,继续执行,
webViewClient = object : WebViewClient() {
override fun onReceivedSslError(p0: WebView?, p1: SslErrorHandler?, p2: SslError?) {
p1?.proceed()
}
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
}
}
其他遇到的一些问题
搜索框光标丢失问题
替换好了之后有个搜索页面,跳转进去之后理应弹出键盘,搜索框内显示光标,可是理想总是美好的,显示并不是这样。检查,mWebView.requestFocus()已设置,再检查
android:focusable="true"
android:focusableInTouchMode="true"
WebView已设置改属性。奇了怪了,没生效?
不是,键盘弹出来了,但是光标没有显示,大概率是焦点聚焦问题,还好这个问题不是很麻烦,比较百度前几条就有一个解决的案例,传送门!就是将上面xml中设置焦点的可用的代码放在WebView的父布局中,比如FrameLayout中,再次运行,解决问题。
滑动压缩问题
这个问题困扰了我半年之余,因为该问题,已经被领导催了两次,这次机缘巧合给解决了,也幸好web端人员积极配合。
就是加载本地静态列表页面或者部分网络请求的列表页,滑动会被压缩,是很严重的那种,真机上也会出现。
出现问题之后,网上说是开启硬件加速的问题,但是我明确表示,没有开!各种配置下都没有开,app到Activity到view。我对比了不压缩的WebView设置,进行了两种对比,其实并没有太大的问题,复制过来之后依旧会压缩,然后第一次换了x5之后,还是会压缩,但是没那么厉害了。后来我将静态列表页面中的html内容复制出来,自己写了一个html,没有任何样式和js,再次放入WebView,神奇的一幕出现了,没有压缩,不管是原生的还是x5,都顺畅运行!
随后web端进行了样式修改,他取消了某种样式之后,确实不再压缩,但是不行,这个样式全局都有使用,一时半会取消不了(如果有类似的问题,可以让web先排查,毕竟WebView的设置只有那些,可能不是Native的问题)。
这次解决也是巧合,替换了最新的x5之后,我按照文档取消了加速相关的所有设置,都是默认的,使用了会导致压缩的样式,模拟器会轻微压缩,但是真机不会,具体的配置我发在下面,也算稀里糊涂解决这个问题了吧。总结:html样式背一部分的锅,另一部分,应该还是和WebView有关。目前我是app开启硬件加速了,但是view层不设置了,具体这部分我都有对比设置过,这不是解决问题的关键。发出来只是供大家参考一下,具体什么原因造成设置怎么解决的,本人也处于丈二和尚摸不着头脑的状态。
冲冲冲!
init {
//WebSettings设置
settings.apply {
//设置默认编码格式为“UTF-8”
defaultTextEncodingName = "UTF-8"
//设置DOM存储可用
domStorageEnabled = true
//js可用
javaScriptEnabled = true
//支持js打开新窗口
javaScriptCanOpenWindowsAutomatically = true
//支持自动加载图片
loadsImagesAutomatically = true
//设置数据库存储可用
databaseEnabled = true
//在File域下,能够执行任意的JavaScript代码,同源策略跨域访问能够对私有目录文件进行访问等
allowFileAccess = true
blockNetworkImage = false
blockNetworkLoads = false
//设置应用缓存可用
setAppCacheEnabled(true)
//设置缓存路径
setAppCachePath(context.applicationContext.getDir("cache", Context.MODE_PRIVATE).path)
//缓存模式:不使用缓存
cacheMode = WebSettings.LOAD_NO_CACHE
//支持页面缩放
setSupportZoom(true)
//缩放使用放大放小按钮控制
builtInZoomControls = true
//不显示边界滑动条
displayZoomControls = false
//使用浏览器组件,建议使用
useWideViewPort = true
loadWithOverviewMode = true
//启用地理定位
setGeolocationEnabled(true)
//支持Http与Https混合模式
mixedContentMode = 0
//设置是否允许通过 file url 加载的 Js代码读取其他的本地文件(有风险,非内部网页建议关闭)
setAllowFileAccessFromFileURLs(true)
//设置是否允许通过 file url 加载的 Javascript 可以访问其他的源(包括http、https等源)(有风险,非内部网页建议关闭)
setAllowUniversalAccessFromFileURLs(true)
//调整线程优先级(一般不建议调整,默认normal)
setRenderPriority(WebSettings.RenderPriority.HIGH)
//取消垂直和水平方向的滑动栏
isVerticalScrollBarEnabled = false
isHorizontalScrollBarEnabled = false
//不允许弹性滑动
overScrollMode = View.OVER_SCROLL_NEVER
//硬件加速
//setLayerType(View.LAYER_TYPE_HARDWARE, null)
webViewClient = object : WebViewClient() {
override fun onReceivedSslError(p0: WebView?, p1: SslErrorHandler?, p2: SslError?) {
p1?.proceed()
}
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
return super.shouldOverrideUrlLoading(view, url)
}
}
addJavascriptInterface(javascriptInterface, JS_OBJ_NAME)
}
}
版权声明:本文标题:WebView网页打不开原因之一(及自己遇到的一些WebView问题记录) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729218445a1190677.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论