karosLi / KKJSBridge

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

KKJSBridgeAjaxURLProtocol和MBHtmlURLProtocol不能同时注册吗 #54

Closed FoneG closed 3 years ago

FoneG commented 3 years ago

场景:初始化webView后同时注册KKJSBridgeAjaxURLProtocol和MBHtmlURLProtocol,并开启enableAjaxHook开关,实现ajaxDelegateManager外部代理。这个时候发现没有KKJSBridgeAjaxURLProtocol逻辑,抓包果然发现body丢失了。

想请问如果想实现离线包方案,应该怎么使用 KKJSBridgeAjaxURLProtocol和MBHtmlURLProtocol

karosLi commented 3 years ago

可以同时注册的,demo 里都可以拦截到,不知道你们代码里是不是有什么逻辑移除了其他protocol的注册了

FoneG commented 3 years ago

把H5链接放到demo中试了确实可以走KKJSBridgeAjaxURLProtocol获取到body。然后对比2边的区别后,发现把HtmlURLProtocol的注册逻辑放到KKJSBridgeAjaxURLProtocol之前就可以。

关于两个URLProtocol的前后调用顺序难道会决定请求的拦截逻辑吗,ps: 另外很好奇,同时注册,ajax请求为什么只有在KKJSBridgeAjaxURLProtocol才能拦截

karosLi commented 3 years ago

是的,一定要确保自己的 HtmlURLProtocol 在 KKJSBridge 之前注册,以为后注册的先执行。

KKJSBridgeAjaxURLProtocol 做了 requestId 判断的,所以才能拦截到

FoneG commented 3 years ago

明白了。感谢作者的解答