WKWebView 实践

最近更新时间:2024-03-19 15:56:51

我的收藏

方案描述

此方案使用 NSURLProtocol 拦截请求,具体步骤:
1. 通过 WKWebView 的私有 API 注册 scheme,保证 NSURLProtocol 可以拦截 WKWebView 中的请求。
2. 根据您使用的网络库类型创建请求。
3. 使用 WKWebView.loadRequest 加载请求。

前提条件

完成 iOS SDK 接入

代码示例

注意
本文档提出了 WebView 场景下 HTTPDNS 集成的参考方案,示例代码非线上生产环境正式代码。在接入之前,我们建议您充分评估本文档内容,以确保方案的健壮性符合您的生产标准。
如果您需要自定义 NSURLProtocol,您可以参考 MSDKDnsHttpMessageTools 的 源码
完整的示例代码在 Demo 的 WebViewController.m 中。
// 1.注册拦截请求的 NSURLProtocol
[NSURLProtocol registerClass:[MSDKDnsHttpMessageTools class]];

// 2.注册scheme
Class 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];