【问题标题】:WKWebView decidePolicyForNavigationAction for html page resourcesWKWebView 决定 html 页面资源的PolicyForNavigationAction
【发布时间】: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


    【解决方案1】:

    根据“失败”的含义,您可能更愿意实现名称中带有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.
    

    【讨论】:

    • Failed 表示 http 代码 4xx、5xx,我会在 decisionPolicy 处理程序中检查它。问题是请求没有到达那里(对该页面的所有 css、js、图像的请求)
    • 不,确实如此,css 和 js 以及图像不是一种导航形式。听起来您需要注入一个事件侦听器。
    • 您的意思是向网页中注入一些东西(如附加的 javascript)以与主机 webview 进行通信,还是更新 WKWebView 设置以获取更多请求信息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2020-02-19
    • 2013-10-23
    • 2018-07-25
    相关资源
    最近更新 更多