WebView网页打不开原因之一(及自己遇到的一些WebView问题记录)

您所在的位置:网站首页 鸿蒙系统有些网站打不开 WebView网页打不开原因之一(及自己遇到的一些WebView问题记录)

WebView网页打不开原因之一(及自己遇到的一些WebView问题记录)

2024-06-01 02:39| 来源: 网络整理| 查看: 265

前瞻

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) } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3