2016-11-18 45 views
2

我們的客戶要求我們最近從WebView切換到WKWebView。他們的應用程序使用本地登錄,這是通過2 POST調用完成的,並返回各種授權cookie,稍後在整個應用程序中使用每個HTTP/AJAX調用。WKWebView AJAX要求丟失cookies

使用WebView,它可以像魅力一樣工作,無需實現一行自定義代碼。用戶登錄後,cookie默認存儲到cookie存儲,並且WebView始終將它們從那裏拿走並使用它們,因爲HTTPCookieStorage在NSURLSession和WebView之間共享。

這是一個WKWebView的全新故事。一旦我們將WebView切換到WKWebView,我們看到授權不起作用。這是由於在WKWebView中丟失了一些cookie。我們現在從NSURLSession響應中存儲cookie並通過向HTTP請求添加「Cookie」頭來手動將它們附加到WKWebView。

我們能夠以這種方式獲得HTTP調用的授權,但現在我們看到了一個新問題。不知何故,在WKWebView中完成的所有AJAX調用都會丟失授權cookie。

請問知道是否有辦法以某種方式讓授權cookie出現在AJAX調用中?注射JavaScript和

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

沒有工作,就好像有過任何的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]; 

Cookie字符串需要格式正確才能被接受。

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

希望這可以有所幫助。

另請參閱: Can I set the cookies to be used by a WKWebView?