2016-12-13 2 views
4

Ich muss die Antwort HTTP-Header aus einer WKWebview Anforderung lesen. Ich muss Anpassungen basierend auf bestimmten benutzerdefinierten Headern durchführen, die vom Server gesendet werden. Es ist nicht möglich, diese Informationen in den Antwortdaten hinzuzufügen.Abrufen von HTTP-Antwortheadern von WKWebview

Ich konnte keinen Eintrag in der Dokumentation noch in vorherigen Fragen hier finden. Gibt es eine Möglichkeit, das zu tun?

Antwort

10

Es sieht aus wie Sie die Antwort vom WKNavigationDelegate Methode webView:decidePolicyFor:decisionHandler: zugreifen können.

einen Gegenstand wie die navigationDelegate s WKWebView‘Set, und fügen Sie diese Methode:

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

    decisionHandler(WKNavigationResponsePolicyAllow); 
} 
1

Von der Delegate-Methode können Sie die (WKNavigationResponse*)navigationResponse abrufen. Und aus dem navigationResponse Objekt können Sie erhalten die Antwort selbst:

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

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

} 
1

Swift 3.1-Version von NobodyNada Antwort:

Ohne Kraft gegossen

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) 
} 

Mit Kraft Besetzung :

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