Ios 用于html页面资源的WKWebView decidePolicyForNavigationAction
我需要监视WKWebKit中加载的给定网页中所有失败的请求。为此,我实现了一个简单的控制器,上面有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"];
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设置以获取附加请求信息?