Android 与Js交互导致web隐藏无法显示的bug 您所在的位置:网站首页 android与web交互 Android 与Js交互导致web隐藏无法显示的bug

Android 与Js交互导致web隐藏无法显示的bug

2023-05-10 08:21| 来源: 网络整理| 查看: 265

起因

需求:WebView标题栏的显示与隐藏

在网页切换时,有的页面自带标题栏,有的页面不带标题栏。当页面带标题栏的时候,隐藏客户端的标题栏,页面不带标题栏的时候,客户端显示标题栏。具体点,

A页面不带标题,客户端显示标题; B页面带标题,客户端隐藏标题;

虽然想吐槽,但小小开发人微言轻,就照着需求来开发吧。

实现:JavaScript的交互

利用Android自带的WebView的addJavascriptInterface方法,获取网页端传来的信息,然后利用接口回调显示或隐藏标题栏

Bug WebView跟着标题消失不见

进入B页面的时候,通过交互隐藏标题时,WebView跟着隐藏(这个其实不应该算是隐藏,后来发现是WebView崩了),且调用goBack()方法WebView后A页面也无法显示(这个时候才发现是WebView崩了)。

处理方案

这个就是线程安全的问题。

JavaScript进行的交互在名为JavaBridge的线程中,而不在主线程中,这个时候用接口回调的方式控制控件,会导致 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.错误,Log信息会打印出来,不过级别是Warn而非Error。

关于 Java Exception was raised during method Invocation

WebView.addJavascriptInterface(A(), "name")这个方法就是实现JavaScript交互,本着Kotlin至上的原则,照着网上的方法用kotlin抄了一个A()过来,结果报了Java Exception was raised during method Invocation这个错误。刚开始还不清楚是客户端还是前端的错误,定位了半天。一气之下用Java重新写了一遍,尴尬,发现是自己最开始写的Kotlin有问题,导致一个空指针异常,但就是找不到这个空指针在哪里,因为根据Log提示,空指针错误的行数是空行,无从下手。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有