-
Notifications
You must be signed in to change notification settings - Fork 102
Description
-
字符串转义bug。如 关于网页传递带"\n"到android与ios端不同点 #4 、 fix Smartisan T1 json parse error #3 、 存在中文乱码问题 #2 ,本质上的原因是通过js bridge传递数据解析时转义有误导致。 此bug会导致验证问题,传递数据不能正常解析,导致不可用,属于Fatal bug 。要彻底解决这个问题就不应该去转义,因为在传递数据格式未限定的情况下,只要转义,正常的数据字符串中都有可能匹配到转义规则(而这些字符串本身是不需要转义), 如果非要转义,就必须得限定jsbridge数据传递的格式,比如必须以json形式传递,这样才可以应用固定的转义规则解析。
-
javascript调用原生方法会偶现失败。在测试过程中发现,失败的时机往往是webview调用
onPageFinished
前后,具体的表现是js调用native方法时shouldOverrideUrlLoading
没有被触发,所以端上没有去刷新js调用的message queue. 至于为什么没有就调用shouldOverrideUrlLoading
,这是因为js和webview通信机智有问题,通过改变iframe src属性的这种方式并不能保证shouldOverrideUrlLoading
每次都会被调用。 -
webview 注入js时机太晚,导致在页面未加载成功之前的js调用原生方法无效; 正确的做法是应该在webview注入成功后刷新一下
window.WVJBCallbacks
(请参照ios版的初始化代码)。 -
与ios版不完全兼容,比如没有
disableJavscriptAlertBoxSafetyTimeout
这个api.
在发现这些问题后,比如第一个问题,已经有多个isuue, 而作者近三年都没有更新过。 于是我不得不重复造了一个轮子,修复了上面所述众多bug, 并与ios版本 marcuswestin/WebViewJavascriptBridge 完全兼容, 在此我贴出地址,欢迎大家来讨论: https://github.com/wendux/WebViewJavascriptBridge