WKWebview
の要求から応答HTTPヘッダーを読み取る必要があります。サーバーから送信された特定のカスタムヘッダーに基づいてカスタマイズを実行する必要があります。この情報を応答データに追加することはできません。
ドキュメントや以前の質問のエントリは見つかりませんでした。それを行う方法はありますか?
WKNavigationDelegate
メソッド webView:decidePolicyFor:decisionHandler:
からの応答にアクセスできるようです。
オブジェクトをWKWebView
のnavigationDelegate
として設定し、次のメソッドを追加します。
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
NSDictionary *headers = ((NSHTTPURLResponse *)navigationResponse.response).allHeaderFields;
decisionHandler(WKNavigationResponsePolicyAllow);
}
NobodyNadaの答えのSwift 3.1バージョン:
フォースキャストなし
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)
}
Swift 4.2 Answers with response.
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void)
{
let response = navigationResponse.response as? HTTPURLResponse
decisionHandler(.allow)
}
デリゲートメソッドから、(WKNavigationResponse*)navigationResponse
を取得できます。そして、navigationResponseオブジェクトから応答自体を取得できます。
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
NSHTTPURLResponse * response = (NSHTTPURLResponse *)navigationResponse.response;
}