关于Android WebView加载异常的排查思路

废话

最近用户反馈界面混乱,显示有问题(浏览器上显示正常)。我收到这消息后一脸懵逼、满脸空白,因为这**是个WebView,而且加载的是第三方的网页。对于webview不咋熟悉的我有些无从下手了,网页是别人的,控件是官方的,我自己写的代码没几行。。。

在这个年代第一步肯定是先问GPT了,

非常完美,喜滋滋改了一圈(不出意外的毛用没有)。

作为一个合格的程序猿怎么会这么轻易放弃呢,那就bing(别问我为啥不用google,问就是保密)找找看有没有大佬遇到过了,很显然网上一大堆,都不解决不了我的问题(解决了就没这篇文章了)。

看来只能自己动手了。

调试工具

首先肯定要能知道我的webview加载的和浏览器加载出来的区别了。

浏览器好办,直接F12啥啥都能看到了,但是webview呢?

1.用Fiddler抓包是个不错的想法

webview截图: 浏览器截图: 这。。。好像也没啥区别。

webview能不能像浏览器一样能调试呢?

2.DevTools

用它可以像浏览器一样调试webview了,真是web混合开发的必备工具,以前咋没发现呢。

使用它不用下载任何工具,只需在代码中加入WebView.setWebContentsDebuggingEnabled(true)这行就行,

断点调试

接下来就好办了,只需在源码中使用debug断点执行就能一步步找到问题了。最终找到本人问题的原因居然是本地存储没开window.localStorage=undefined,调用webView.settings.domStorageEnabled = true就好了

总结

花了两天时间最后找出来个这,惭愧惭愧。不过得出一个结论,使用webview时特别是嵌套第三方网页时,能开得设置尽量都打开吧。

js 复制代码
webView.settings.run {
            javaScriptEnabled = true//支持js
            javaScriptCanOpenWindowsAutomatically = true
            //设置自适应屏幕
            useWideViewPort = true //将图片调整到适合webview的大小
            loadWithOverviewMode = true // 缩放至屏幕的大小
            cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK// 设置缓存
            domStorageEnabled = true//访问本地存储
            allowFileAccess = true
            databaseEnabled = true//访问数据库
            builtInZoomControls = false//是否手势缩放
            displayZoomControls = false//显示缩放控件
            layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL//适应屏幕
            
            setAllowUniversalAccessFromFileURLs(true)
            setAllowFileAccessFromFileURLs(true)
        }

最后附上官方文档:WebSettings在 WebView 中构建 Web 应用

相关推荐
消失的旧时光-194314 分钟前
Kotlin 协程设计思想(七):为什么 Kotlin 要设计 SupervisorJob 和 supervisorScope?
android·开发语言·kotlin
故渊at25 分钟前
第一板块:Android 系统基石与运行原理 | 第五篇:Context 上下文与资源配置体系
android·人工智能·opencv·context·上下文·资源配置体系
故渊at36 分钟前
第一板块:Android 系统基石与运行原理 | 第四篇:进程孵化(Zygote)与 Low Memory Killer 机制
android·虚拟机·zygote·系统启动·low memory·进程孵化
JohnnyDeng9442 分钟前
【Android】RecyclerView性能优化与缓存机制:从卡顿到丝滑的完整指南
android·性能优化·kotlin·mvvm
zfoo-framework43 分钟前
kotlin中体会到一些比较好用的点
android·开发语言·kotlin
●VON3 小时前
AtomGit Flutter鸿蒙客户端:文件树与代码浏览
android·服务器·安全·flutter·harmonyos·鸿蒙
故渊at9 小时前
系列三:组件化与模块化进阶 | 第11篇 组件化项目规范与问题根治:依赖、资源、Manifest 与混淆的全链路管控
android·架构·mvvm·模块化·组件化
故渊at10 小时前
系列二:MVVM 深度实战与项目重构 | 第7篇 LiveData & StateFlow 状态管理实战:从“粘包弹”到“丝滑流式”
android·重构
是阿建吖!10 小时前
【Linux】信号
android·linux·c语言·c++
alexhilton12 小时前
AppFunctions:让你的Android应用更容易被AI智能体发现
android·kotlin·android jetpack