0

Мое требование - обновить файлы cookie, которые установлены на WKWebView. Я могу обновить печенье в NSHTTPCookieStorage, но одни и те же куки не отражаются на WKWebView печенья (Значения обновлений присутствуют в NSHTTPCookieStorage, но не установлены в WKWebView)Обновить значения Cookie WKWebView

Ниже код, который я использовал для установки что куки-файлы для AJAX-вызовов.

NSString *strURL = DASHBOARDURL; 

NSURL *url = [NSURL URLWithString:strURL]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 

[request setURL:url]; 

NSMutableString *script = [[NSMutableString alloc] init]; 
NSMutableString *cookieString = [[NSMutableString alloc] init]; 

for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { 
    [cookieString appendString:[NSString stringWithFormat:@"%@;", cookie.getCookieString]]; 
    [script appendString:[NSString stringWithFormat:@"document.cookie='%@';",cookie.getCookieString]]; 

} 
[request setValue:cookieString forHTTPHeaderField:@"Cookie"]; 
//cookies for further AJAX calls 
WKUserContentController *userContentController = [[WKUserContentController alloc] init]; 
WKUserScript *cookieInScript = [[WKUserScript alloc] initWithSource:script 
                 injectionTime:WKUserScriptInjectionTimeAtDocumentStart 
                forMainFrameOnly:NO]; 
[userContentController removeAllUserScripts]; 

[userContentController addUserScript:cookieInScript]; 

WKWebViewConfiguration *webViewConfig = [[WKWebViewConfiguration alloc] init]; 

webViewConfig.userContentController = userContentController; 

CGRect viewRect = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height); 
wkWebView = [[WKWebView alloc] initWithFrame:viewRect configuration:webViewConfig]; 
wkWebView.navigationDelegate = self; 
[wkWebView loadRequest:request]; 
[self.view addSubview:wkWebView]; 

После обновления куки, я пытался напечатать существующие куки в моем NSHTTPCookieStorage, который показывает обновленные значения.

NSLog(@"cookies:%@",[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]); 

Я также попытался напечатать скрипт в WKNavigationDelegate после обновления куки, но это показывает старые значения.

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{ 
NSLog(@"Script: %@",[wkWebView.configuration.userContentController.userScripts firstObject].source); 

} 

ответ

0

Следующий код фиксируется мой вопрос:

NSMutableString *script = [[NSMutableString alloc] init]; 
for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { 
    [script appendString:[NSString stringWithFormat:@"document.cookie='%@';",cookie.getCookieString]]; 
} 
[wkwebView evaluateJavaScript:script completionHandler:^(id test, NSError *error){ 
    NSLog(@"test"); 
}]; 


-(NSString *)getCookieString 
{ 
NSString *string = [NSString stringWithFormat:@"%@=%@;expiresDate=%@;path=%@;sessionOnly=%@;isSecure=%@", 
     self.name, 
     self.value, 
     self.expiresDate, 
     self.path ?: @"/", 
     self.isSecure ? @"TRUE":@"FALSE", 
     self.sessionOnly ? @"TRUE":@"FALSE"]; 
return string; 
}