文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android问题笔记 - 解决WebView白屏空白的九种方案,AutoSize?

2023-08-17 06:25

关注
专栏分享

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉实践过程

😜情况一

比如我第一个要说的就是你项目如果集成了AutoSize的话,并且使用了副单位,会有一定概率webview里面适配失效,注意失效后会因为单位特别大等原因看起来是白屏(其实是超出了可视范围导致看不见了而已),你还需要适配下即可。继承下webview,复写setOverScrollMode方法,里面设置AutoSize即可。我在这一块吃了很大的一个亏。气死了。

class YourWebView : WebView {   constructor(context: Context) : super(context) {    }    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {    }    override fun setOverScrollMode(mode: Int) {         super.setOverScrollMode(mode)        AutoSize.autoConvertDensityOfGlobal(context as Activity)    }}

😜情况二

其实只要你百度基本都能发现,最多的就是setDomStorageEnabled属性设置为true来解决。
其实确实是这样。但是我们要有一个概念,白屏不一定是webview的原因,还有可能是其他的原因,比如上面的AutoSize。
HTML5 的 DOM Storage 机制提供了一种方式让程序员能够把信息存储到本地的计算机上,在需要时获取。这点和 cookie 相似,区别是 DOM Storage 提供了更大容量的存储空间。
localStorage 对象和 sessionStorage 对象使用方法基本相同,它们的区别在于作用的范围不同。sessionStorage 用来存储与页面相关的数据,它在页面关闭后无法使用。而 localStorage 则持久存在,在页面关闭后也可以使用。

😜情况三

本身html就有bug,别不信,遇到好几次了。前端同事在他那跑起来没问题,可随时Android运行就是不行,后来一点发现直接在浏览器运行就有问题。前端同事很有可能在开发环境下没事,发布出来就有毛病了,或者是从大模块里摘出来的小模块,大模块下运行着没事,小模块摘出来没弄好导致问题。

😜情况四

合理适时的清理webview的缓存,以及webview页面关闭硬件加速。平时工作中和前端交流也是,他们说的最多的就是缓存问题,web遇见bug或问题,说浏览器或缓存的问题,刷新下就好了。挺魔幻的。

// 清缓存和记录,缓存引起的白屏mWebView.clearCache(true);mWebView.clearHistory();//... 有很多clear的方法

😜情况五

https的问题,当load通过SSL加密的HTTPS页面时,如果这个页面的安全证书无法得到认证,WebView就会显示成空白页。比如出现Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https。
这个是开启相关设置即可。
通过重写WebViewClient的onReceivedSslError方法来接受所有网站的证书,忽略SSL错误。

  @Override  public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {       handler.proceed();       super.onReceivedSslError(view, handler, error);   }
webSetting.setAllowUniversalAccessFromFileURLs(true);

😜情况六

在Android 5.0之后,WebView默认不允许Https + Http的混合使用方式,所以当Url是Https的,图片资源是Http时,导致页面加载失败。需要设置 MixedContentMode属性允许Https+Http混用。

WebSettings wetSettings = webView.getSettings();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {    wetSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}

😜情况七

多android版本兼容问题,在Android7.0+,打开二级页面跳转的时候,会出现空白!!原因是不同版本的系统WebViewClient的回调里shouldOverrideUrlLoading方法的loadurl不一定是地址,也有可能是对象。

WebViewClient client = new WebViewClient() {    //防止加载网页时调起系统浏览器    @Override    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            view.loadUrl(request.getUrl().toString());        } else {            view.loadUrl(request.toString());        }        return true;    }   //.......};

😜情况八

如果上面都不行,一般就是自己做更深的检测了。思路是:

  1. 截取当前屏幕的内容,获得Bitmap
  2. 判断Bitmap是否为白色图片
  3. 针对白屏做相应的处理

可参考:https://juejin.cn/post/6972901939197509669

😜情况九

事实证明高级语言,什么框架啊,前沿技术啊,都有很多的坑,兼容问题,他们的表现在某方面可能好但并不是全部适用。如果你是领导,且是以出产品为目的,挺推荐约束同事就用原生的开发,渐渐的累积起来后续开发会越来越快。

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

来源地址:https://blog.csdn.net/qq_27489007/article/details/130028649

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯