2016-12-13 187 views
4

我需要從WKWebview的請求中讀取響應HTTP標頭。我需要根據服務器發送的某些自定義標題執行自定義。無法在響應數據中添加此信息。從WKWebview中檢索HTTP響應標頭

我無法在文檔中找到任何條目,也無法在此處找到以前的問題。有沒有辦法做到這一點?

回答

10

看起來你可以訪問從WKNavigationDelegate方法webView:decidePolicyFor:decisionHandler:響應。

設置一些對象爲WKWebViewnavigationDelegate,並添加以下方法:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler { 
    NSDictionary *headers = ((NSHTTPURLResponse *)navigationResponse.response).allHeaderFields; 

    decisionHandler(WKNavigationResponsePolicyAllow); 
} 
1

從代表方法,您可以檢索(WKNavigationResponse*)navigationResponse。而從navigationResponse對象,你可以得到響應本身:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler { 

    NSHTTPURLResponse * response = (NSHTTPURLResponse *)navigationResponse.response; 

} 
1

雨燕3.1的版本NobodyNada的回答:

沒有力量投

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { 
    if let response = navigationResponse.response as? HTTPURLResponse { 
     let headers = response.allHeaderFields 
     //do something with headers 
    } 
    decisionHandler(.allow) 
} 

用力投:

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { 
    let headers = (navigationResponse.response as! HTTPURLResponse).allHeaderFields 
    //do something with headers 
    decisionHandler(.allow) 
}