WebView网页打不开原因之一(及自己遇到的一些WebView问题记录)
前瞻
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 = trueblockNetworkImage = falseblockNetworkLoads = false//设置应用缓存可用setAppCacheEnabled(true)//设置缓存路径setAppCachePath(context.applicationContext.getDir("cache", Context.MODE_PRIVATE).path)//缓存模式:不使用缓存cacheMode = WebSettings.LOAD_NO_CACHE//支持页面缩放setSupportZoom(true)//缩放使用放大放小按钮控制builtInZoomControls = true//不显示边界滑动条displayZoomControls = false//使用浏览器组件,建议使用useWideViewPort = trueloadWithOverviewMode = 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 = falseisHorizontalScrollBarEnabled = 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问题记录)相关推荐
- 网页打不开服务器分析,网页打不开是什么原因 网页打不开原因分析【解决方法】...
网页打不开是什么原因? 现在对于很多人来说是无网络不能活,出门在外第一件事就是问wifi密码,回家第一件事就是开电脑,但要是遇到网页打不开的情况应该怎么办呢? 下面,我们就来看看网络故障排查教程. 1 ...
- WebView网页视频统一全屏播放及横竖屏切换
WebView 支持 Html5 video 进行全屏播放及横竖屏自动切换 1.检查AndroidManifest.xml清单文件,WebView控件所在的Activity配置信息;检查Activit ...
- 百度二级网页打不开_网页打不开,原因在这里!
不知道小伙伴们,有没有遇到这样的问题,网络明明没问题,QQ等工具也可以正常登陆,就是有一部分网页打不开! 打不开一般就俩原因: 1.网站服务器出问题了,网页访问不了! 2.DNS问题,访问网页,错误代 ...
- html手机网站打不开,手机网页打不开是什么原因?网络正常但打不开网页怎么回事...
不知道小伙伴们,有没有遇到这样的问题,网络明明没问题,QQ等工具也可以正常登陆,就是有一部分网页打不开! 打不开一般就俩原因: 1.网站服务器出问题了,网页访问不了! 2.DNS问题,访问网页,错误代 ...
- html5页面打不开原因,部分网页打不开是什么原因,详细教您网页打不开怎么解决...
现在平时没事的时候,就会上上网,看看电影啊什么的等,希望通过它们能好好的放松下疲惫的身心.有用户发现该网页打不开,是不是觉得特别的郁闷呢?别着急,下面,小编给大家介绍网页打不开的解决步骤. 在浏览网站 ...
- excel打不开是什么原因_网页打不开是什么原因
网页打不开是什么原因 1.浏览器"连接"选项设置错误 解决办法:正确设置上网类型.如果是通过代理服务上网的,请正确填写代理服务器的IP地址与端口号;如果不是,请不要勾选" ...
- html5页面打不开原因,有网但是网页打不开是什么原因(原因及2种解决方法)
本来刚交了宽带网络信用卡年费,并且本地连接表明一切正常情况,却偏要打开网站一直发生难题,换了电脑浏览器和重新启动都失效,应该怎么办呢?不必担心!下边小编给大伙儿梳理了一些相关网络链接一切正常可是不能上 ...
- 打不开_网页打不开,怎解?
故障模板中可选的故障现象没有"网页打不开",遇到用户反映网页打不开问题时,我们该如何处理呢? 来,我们先来理理思路:实现访问一个网站(注解:网站是一个整体,网页是一个个体,一个网站 ...
- 网页 两秒弹出窗口_电脑网页打不开但qq能用怎么回事
使用电脑过程中,有时候会遇到很奇怪的情况:电脑网页打不开但qq却能正常使用,让人感到莫名其妙. 那么遇到这种问题,可能是什么原因导致呢?而我们又该怎么解决呢? 通常出现这种情况,大多数情况下是因为dn ...
- 电脑网页打不开但qq能上解决方法
2019独角兽企业重金招聘Python工程师标准>>> 问题描述: 电脑网页打不开但qq能上. 问题原因: 是由于电脑系统的DNS解析出了问题. 解决方法: 首先在键盘上同时按下 ...
最新文章
- 将矩阵转为一行_LeetCode 力扣官方题解 | 861. 翻转矩阵后的得分
- R-CNN , Fast R-CNN , Faster R-CNN原理及区别
- 【转】WebApi中的C#await / async,重点是什么?
- ajax请求php省略后缀,如何在PHP中更安全地处理Ajax请求?
- AD Framework 单点登录
- php xml getattribute,PHP XMLReader getAttribute()用法及代码示例
- train_val.prototxt文件和deploy.prototxt文件开头的区别
- dom4j获取指定节点值_XML解析之DOM4j以及XPATH技术
- 在线HTTP/HTTPS协议GET,POST,RESTful接口测试
- ❤️Java面试高频《注解与反射》(建议收藏)❤️
- Tomcat的安装、配置常见问题
- QT全局钩子监控鼠标和键盘
- 象棋军师app已经上线
- 【economic】程序员外包平台
- 小米6手机投屏到wins 8.1电脑上的软件——scrcpy的安装与使用教程
- 将ESXI上的虚拟机导出为OVF模板
- 【Mysql数据库】数据库添加索引方式
- 文档翻译器怎么用?如何完成整篇word文档翻译
- 80后的17条潜规则,你占了几条?
- chrom中如何跳过debugger