WKWebView拦截请求资源

方案一:
使用 NSURLProtocol 拦截 WKWebView 请求
问题:
1、拦截请求需要使用私有接口(WKBrowsingContextController类和registerSchemeForCustomProtocol方法),存在兼容性风险以及上架被拒的风险
2、存在 POST 请求存在 body 会被清空的问题(由于我们只需要注册file scheme,不注册http/https scheme,所以不存在此问题)
3、对ATS支持不足,Allow Arbitrary Loads 选项设置为NO,同时通过 registerSchemeForCustomProtocol 注册了 http(s) scheme,WKWebView 发起的所有 http 网络请求将被阻塞(即便将Allow Arbitrary Loads in Web Content 选项设置为YES)

方案二:
使用 WKURLSchemeHandler 拦截 WKWebView 请求
问题:
1、该方案只兼容 iOS 11 及以上设备
2、前端无法通过document.cookie获取客户端同步的cookie(如果前端不使用cookie,就不存在此问题)

NSProtocol方案:
1、https://madaocn.github.io/urlprotocol-hook-wkwebview/

2、https://juejin.im/post/6847902219434459144

3、https://www.jianshu.com/p/f88c9d094aa5?utm_source=desktop&utm_medium=timeline

4、https://www.jianshu.com/p/4fc13d4d5607/

5、iOS - NSProtocol 拦截 WKWebView POST 请求 body 会被清空的问题解决

WKURLSchemeHandler方案:
1、https://zhuanlan.zhihu.com/p/56965133

2、https://www.jianshu.com/p/a9d7b1bc3ae6

3、WKWebView离线包开发小记

4、https://www.jianshu.com/p/6bae04c91297

其他:
一站式解决WKWebView各类问题

WKWebView 离线包方案比较

注:文章末尾存在规避使用私有方法风险的方法
NSURLPtotocol无法拦截AFN ,WKWebView

WKWebView 那些坑

你可能感兴趣的:(WKWebView拦截请求资源)