2016-11-18 9 views
2

私たちの顧客は最近WebViewからWKWebViewへの切り替えを依頼しました。彼らのアプリはネイティブログインを使用しています。これはバックエンドへの2回のPOST呼び出しによって行われ、その後、さまざまな認可Cookieが返され、その後、すべてのHTTP/AJAX呼び出しで使用されます。WKWebView AJAXがクッキーを失うように呼びます

WebViewでは、1行のカスタムコードを実装する必要がなく、すべてが魅力的でした。ユーザーはログインしていて、クッキーはデフォルトでCookieストレージに保存されていました.WebViewはNSURLSessionとWebViewの間でHTTPCookieStorageが共有されていたので、常にそこから取得して使用しました。

WKWebViewを使った全く新しい話です。 WebViewをWKWebViewに切り替えると、承認が機能していないことがわかりました。それはWKWebViewでいくつかのクッキーを失うためでした。 NSURLSessionレスポンスのクッキーを保存し、WKWebViewにHTTPリクエストに「Cookie」ヘッダーを追加して手動で追加します。

このようにHTTPコールの承認を取得することができましたが、今は新しい問題が発生しています。どういうわけか、WKWebViewで行われたすべてのAJAX呼び出しで許可Cookieが失われます。

何とかAJAX通話に承認クッキーが表示されるようになる方法があるかどうかご存知ですか?

javascriptCookieString = @"document.cookie = 'testCookie=testValue';"; 
[self.webView evaluateJavaScript:javascriptCookieString completionHandler:nil]; 

ではJavaScriptを注入することは動作しませんでしたし、一切のJavascriptに対する制御がコールされていないように思えるので、それらが実行される前に、私は要求を変更することはできません。ありがとうございました。

答えて

0

私は次のスニペットが私たちの手口を見つけたことがわかりました。私たちも同じ問題を抱えていました。

// add session cookie to ajax calls 
WKUserContentController* userContentController = 
WKUserContentController.new; 
WKUserScript * cookieScript = 
     [[WKUserScript alloc]          
     initWithSource: [[User sharedInstance] getJavscriptCookieString]          
     injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]; 


[userContentController addUserScript:cookieScript]; 

WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init]; 
webViewConfiguration.userContentController = userContentController; 
      webViewConfiguration.preferences.javaScriptCanOpenWindowsAutomatically = true; 

_wk = [[WKWebView alloc] initWithFrame:self.view.frame configuration:webViewConfiguration]; 

クッキー文字列を受け入れるには正しい形式にする必要があります。

-(NSString*) getJavscriptCookieString { 
    return [NSString stringWithFormat: @"document.cookie = '%@=%@'", [self getSessionName], [self getSessionValue]]; 
} 

これは何らかの助けになると思います。

も参照してください。 Can I set the cookies to be used by a WKWebView?

関連する問題