Ios 用于html页面资源的WKWebView decidePolicyForNavigationAction

Ios 用于html页面资源的WKWebView decidePolicyForNavigationAction,ios,wkwebview,nsurlprotocol,Ios,Wkwebview,Nsurlprotocol,我需要监视WKWebKit中加载的给定网页中所有失败的请求。为此,我实现了一个简单的控制器,上面有WKWebView,并且使该控制器符合WKNavigationDelegate: - (void)viewDidLoad { [super viewDidLoad]; webView.navigationDelegate = self; NSURL *url = [NSURL URLWithString: @"https://google.com"];

我需要监视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)实现此类跟踪?

根据“失败”的含义,您可能更愿意在名称中使用
fail
实现这些方法:

func webView(WKWebView, didFail: WKNavigation!, withError: Error)
    Called when an error occurs during navigation.
func webView(WKWebView, didFailProvisionalNavigation: WKNavigation!, withError: Error)
    Called when an error occurs while the web view is loading content.

失败意味着http代码为4xx,5xx,我将在decidePolicy处理程序中检查它。问题是请求没有到达那里(请求该页面中的所有css、js、图像)不,没错,css、js和图像不是一种导航形式。听起来您需要的是注入一个事件侦听器。您的意思是在网页中注入一些内容(如附加的javascript)以与主机webview通信,还是更新WKWebView设置以获取附加请求信息?