方案一:
使用 NSURLProtocol 攔截 WKWebView 請求
問題:
1、攔截請求需要使用私有接口(WKBrowsingContextController類和registerSchemeForCustomProtocol方法),存在兼容性風(fēng)險以及上架被拒的風(fēng)險
2、存在 POST 請求存在 body 會被清空的問題(由于我們只需要注冊file scheme,不注冊http/https scheme,所以不存在此問題)
3、對ATS支持不足,Allow Arbitrary Loads 選項設(shè)置為NO,同時通過 registerSchemeForCustomProtocol 注冊了 http(s) scheme,WKWebView 發(fā)起的所有 http 網(wǎng)絡(luò)請求將被阻塞(即便將Allow Arbitrary Loads in Web Content 選項設(shè)置為YES)
方案二:
使用 WKURLSchemeHandler 攔截 WKWebView 請求
問題:
1、該方案只兼容 iOS 11 及以上設(shè)備
2、前端無法通過document.cookie獲取客戶端同步的cookie(如果前端不使用cookie,就不存在此問題)
NSProtocol方案:
1、https://madaocn.github.io/urlprotocol-hook-wkwebview/
2、https://juejin.im/post/6847902219434459144
3、http://m.itdecent.cn/p/f88c9d094aa5?utm_source=desktop&utm_medium=timeline
4、http://m.itdecent.cn/p/4fc13d4d5607/
5、iOS - NSProtocol 攔截 WKWebView POST 請求 body 會被清空的問題解決
WKURLSchemeHandler方案:
1、https://zhuanlan.zhihu.com/p/56965133
2、http://m.itdecent.cn/p/a9d7b1bc3ae6
4、http://m.itdecent.cn/p/6bae04c91297
注:文章末尾存在規(guī)避使用私有方法風(fēng)險的方法
NSURLPtotocol無法攔截AFN ,WKWebView