事情起因是这样的:
近期突然不少海外用户向我们反馈,我们的应用页面白屏了,但是最近客户端与前端都没有进行过发版。所以刚开始我们对此一头雾水,不知道从哪里排查,国内机器试了好久完全无法复现。
在经历漫长的复现过程之后,一台小米的机子出现同样问题,经过排查,前端调用客户端方法时,方法名 not found 初步怀疑是容器更新导致的,我们的应用是客户端内嵌 H5,二者通信通过 JSBridge,去 Google Play 上一搜,果然 Android System Webview 9.11号更新了,主要变化是它默认往容器注入了一个全局变量 android,巧合的是,我们的 JSBridge 全局变量名也是挂载在 window 下的 android,此同名操作导致原本我们的注入被谷歌覆盖,前端调用客户端方法时直接404。
解决方法是:在进行注入操作时,判断到具体的方法名,比如:window.android.getToken 是否存在,而不是先前的只判断 window.android 是否存在,不存在就进行 jsb 注入操作。
如果有类似直接在 window.android 下注入 jsb 能力的兄弟,记得做一下兼容处理。
为啥国内难以复现呢?因为国内好多系统还没更新,我们复现还是通过安装谷歌套件,去 Google Play 更新的容器。