【发布时间】:2020-08-18 00:17:36
【问题描述】:
我需要监控来自 WKWebKit 中加载的给定网页的所有失败请求。为此,我实现了一个带有WKWebView 的简单控制器,并且使该控制器符合WKNavigationDelegate:
- (void)viewDidLoad
{
[super viewDidLoad];
webView.navigationDelegate = self;
NSURL *url = [NSURL URLWithString: @"https://google.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
[webView loadRequest:request];
}
- (void)webView:(WKWebView *)webView
decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse
decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
NSLog(@"webView.decidePolicyForNavigationResponse %@", navigationResponse.response);
decisionHandler(WKNavigationResponsePolicyAllow);
}
- (void)webView:(WKWebView *)webView
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
NSLog(@"webView.decidePolicyForNavigationAction %@", navigationAction.request);
decisionHandler(WKNavigationActionPolicyAllow);
}
我也尝试实现自定义 NSURLProtocol 扩展,但可以看到与 navigationDelegate 一样的初始请求:
[NSURLProtocol registerClass:[TrackingNSURLProtocol class]];
我可以在我的输出中看到我对google.com 网页的主要请求,但是即使在加载页面时由同一个 WKWebView 执行和下载了由该页面启动的子请求(css、js 、图像等)。
是否可以使用 WKWebView(或一般使用 iOS)实现这种跟踪?
【问题讨论】:
标签: ios wkwebview nsurlprotocol