karosLi / KKJSBridge

一站式解决 WKWebView 支持离线包,Ajax/Fetch 请求,表单请求和 Cookie 同步的问题 (基于 Ajax Hook,Fetch Hook 和 Cookie Hook)
MIT License
693 stars 120 forks source link

window.prompt("KKJSBridge", messageString)不触发UIDelegate回调方法 #64

Open FoneG opened 3 years ago

FoneG commented 3 years ago

为了实现webView和navtive埋点数据的同步,我们把page数据放到了cookie中给前端去读取。 前端读取cookie的时候(html、样式、脚本等静态资源加载完成,脚本文件开始解析执行),发现 window.prompt("KKJSBridge", messageString) 返回的response为null。打断点后发现prompt并没有触发UIDelegate的代理方法。

      KKJSBridge.prototype.syncCall = function (module, method, data) {
          function call() {
              var message = xxx
              var messageString = JSON.stringify(message);
              var response = window.prompt("KKJSBridge", messageString);
              return response ? JSON.parse(response) : null;
          }
           xxx
     };
wjiuxing commented 3 years ago

弱弱地问一句,你是想走同步 JS 交互接口,还是想弹个框?

FoneG commented 3 years ago

弱弱地问一句,你是想走同步 JS 交互接口,还是想弹个框?

就是想获取cookie信息,用的 'KKJSBridge/AjaxProtocolHook'

karosLi commented 3 years ago

image 需要在自己自定义的 webview 代理里实现如下代码

FoneG commented 3 years ago

需要在自己自定义的 webview 代理里实现如下代码

已经实现了上面的代码,并且【不触发UIDelegate回调方法】的情形只在打开第一个webView的情况下才会出现,打开第二个webView就能正常走UIDelegate回调逻辑。

因为读取行为也是通过脚本自动执行的,推测可能跟js注入有关。目前临时方案是取消webView的预热,可以解决问题。但后面不知道该如何进一步分析,找出原因