0

Meine Anforderung besteht darin, die Cookies zu aktualisieren, die auf WKWebView gesetzt sind. Ich bin in der Lage, die Cookies in NSHTTPCookieStorage zu aktualisieren, aber die gleichen Cookies nicht zu WKWebView Cookies reflektiert (Die Aktualisierungswerte in NSHTTPCookieStorage vorhanden sind, aber nicht auf WKWebView)WKWebView-Cookie-Werte aktualisieren

Hier finden Sie Code, die ich verwendet haben, um eingestellt dass Cookies zu AJAX aufrufen.

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]; 

Nachdem die Cookies zu aktualisieren, habe ich versucht, die vorhandenen Cookies in meinem NSHTTPCookieStorage zu drucken, die die aktualisierten Werte zeigt.

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

Ich habe auch versucht, in WKNavigationDelegate das Skript aus Aufträgen, die Cookies zu aktualisieren, aber es zeigt die alten Werte.

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

} 

Antwort

0

Der folgende Code mein Problem behoben:

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