正常情况下,wkwebView 发起请求是不需要我们手动设置cookie的,
因为iOS系统中一个进程中公用一个NSHTTHCookieStorage,发送请求的时候会
将cookie传入;但是会遇到需要我们手动写入 cookie的情况,直接上代码
1 将需要写入的cookie参数拼接成js代码
//配置config,获取cookieString
- (NSString *)cookieJavaScriptString {
NSMutableString *cookieString = [[NSMutableString alloc] init];
NSDictionary *cookieDic = [mUserDefaults objectForKey:self.cookieCacheName];
for (NSString *key in cookieDic) {
NSHTTPCookie *cookie = [[NSHTTPCookie alloc] initWithProperties:[cookieDic objectForKey:key]];
NSString *excuteJSString = [NSString stringWithFormat:@"document.cookie='%@=%@';", cookie.name, cookie.value];
[cookieString appendString:excuteJSString];
}
for (NSString *key in self.cookieParameter.allKeys) {
NSString *excuteJSString = [NSString stringWithFormat:@"document.cookie='%@=%@';", key, self.cookieParameter[key]];
[cookieString appendString:excuteJSString];
if ([key isEqualToString:@"access_token"]) {
[cookieString replaceOccurrencesOfString:key withString:@"__wyToken" options:NSCaseInsensitiveSearch range:NSMakeRange(0, cookieString.length)];
} else if ([key isEqualToString:@"refresh_token"]) {
[cookieString replaceOccurrencesOfString:key withString:@"__wyRToken" options:NSCaseInsensitiveSearch range:NSMakeRange(0, cookieString.length)];
} else if ([key isEqualToString:@"login_name"]) {
[cookieString replaceOccurrencesOfString:@"login_name" withString:@"__wyUsername" options:NSCaseInsensitiveSearch range:NSMakeRange(0, cookieString.length)];
} else if ([key isEqualToString:@"uid"]) {
[cookieString replaceOccurrencesOfString:@"uid" withString:@"__wyUid" options:NSCaseInsensitiveSearch range:NSMakeRange(0, cookieString.length)];
}
}
//执行js
return cookieString;
}
2 初始化webview的时候注入js
WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource:[self cookieJavaScriptString] injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
[userContentController addUserScript:cookieScript];
3 在网页加载结束之后,再次调用注入cookie的js
// 页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
if (self.cookieParameter.allKeys.count) {
///需要写入cookie
[webView evaluateJavaScript:[self cookieJavaScriptString] completionHandler:^(id result, NSError *error) {
//...
}];
}
。。。。
以上就完成了cookie的写入