首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新WKWebView Cookie值

更新WKWebView Cookie值
EN

Stack Overflow用户
提问于 2016-06-29 19:43:40
回答 1查看 2.4K关注 0票数 0

我的要求是更新设置为WKWebView的cookies。我可以更新NSHTTPCookieStorage中的cookies,但相同的cookies不会反映到WKWebView cookies中(更新值存在于NSHTTPCookieStorage中,但没有设置为WKWebView)

下面是我用来将cookie设置为AJAX调用的代码。

代码语言:javascript
复制
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];

在更新cookies之后,我尝试打印NSHTTPCookieStorage中的现有cookies,其中显示了更新后的值。

代码语言:javascript
复制
NSLog(@"cookies:%@",[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]);

在更新cookies之后,我还尝试在WKNavigationDelegate中打印脚本,但它显示的是旧值。

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

}
EN

回答 1

Stack Overflow用户

发布于 2016-07-13 14:40:09

下面的代码修复了我的问题:

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38098567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档