方案描述
此方案使用 NSURLProtocol 拦截请求,具体步骤:
1. 通过 WKWebView 的私有 API 注册 scheme,保证 NSURLProtocol 可以拦截 WKWebView 中的请求。
2. 根据您使用的网络库类型创建请求。
3. 使用 WKWebView.loadRequest 加载请求。
前提条件
完成 iOS SDK 接入。
代码示例
注意
本文档提出了 WebView 场景下 HTTPDNS 集成的参考方案,示例代码非线上生产环境正式代码。在接入之前,我们建议您充分评估本文档内容,以确保方案的健壮性符合您的生产标准。
如果您需要自定义 NSURLProtocol,您可以参考 MSDKDnsHttpMessageTools 的 源码。
// 1.注册拦截请求的 NSURLProtocol[NSURLProtocol registerClass:[MSDKDnsHttpMessageTools class]];// 2.注册schemeClass cls = NSClassFromString(@"WKBrowsingContextController");SEL sel = NSSelectorFromString(@"registerSchemeForCustomProtocol:");if ([cls respondsToSelector:sel]) {// 通过http和https的请求,同理可通过其他的Scheme 但是要满足ULR Loading System[cls performSelector:sel withObject:@"http"];[cls performSelector:sel withObject:@"https"];}// 3.使用WKWebView.loadRequest[self.wkWebView loadRequest:request];