Skip to content

存在多个致命bug #5

@wendux

Description

@wendux
  1. 字符串转义bug。如 关于网页传递带"\n"到android与ios端不同点 #4fix Smartisan T1 json parse error #3存在中文乱码问题 #2 ,本质上的原因是通过js bridge传递数据解析时转义有误导致。 此bug会导致验证问题,传递数据不能正常解析,导致不可用,属于Fatal bug 。要彻底解决这个问题就不应该去转义,因为在传递数据格式未限定的情况下,只要转义,正常的数据字符串中都有可能匹配到转义规则(而这些字符串本身是不需要转义), 如果非要转义,就必须得限定jsbridge数据传递的格式,比如必须以json形式传递,这样才可以应用固定的转义规则解析。

  2. javascript调用原生方法会偶现失败。在测试过程中发现,失败的时机往往是webview调用 onPageFinished 前后,具体的表现是js调用native方法时 shouldOverrideUrlLoading没有被触发,所以端上没有去刷新js调用的message queue. 至于为什么没有就调用shouldOverrideUrlLoading,这是因为js和webview通信机智有问题,通过改变iframe src属性的这种方式并不能保证shouldOverrideUrlLoading每次都会被调用。

  3. webview 注入js时机太晚,导致在页面未加载成功之前的js调用原生方法无效; 正确的做法是应该在webview注入成功后刷新一下 window.WVJBCallbacks (请参照ios版的初始化代码)。

  4. 与ios版不完全兼容,比如没有 disableJavscriptAlertBoxSafetyTimeout这个api.

在发现这些问题后,比如第一个问题,已经有多个isuue, 而作者近三年都没有更新过。 于是我不得不重复造了一个轮子,修复了上面所述众多bug, 并与ios版本 marcuswestin/WebViewJavascriptBridge 完全兼容, 在此我贴出地址,欢迎大家来讨论: https://github.com/wendux/WebViewJavascriptBridge

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions