iOS 在WKWebView设置多个Cookie(总结我跑过的坑)
不废话,1-直接说坑;2-po代码。
1-直接说坑
重点1: 通过字典设置相关参数,生成NSHTTPCOOKie对象。我这里生成了三个。并装填进数组中。并给request的HTTPHeaderField进行keyValue赋值。
重点2: 初始化webView时,要进行对javaScript进行注入。所有的cookie拼接成一个字符串。用分号和换行符隔开。(保证在首次load前,cookie中的数据已存入。)
重点3: 每次进行重定向,也就是调用WKWebView如下代理方法时。都要获取Cookie,并再次传入。保证每次loadURL,都能获取到Cookie
-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
重点4: cookie中如果要传嵌套对象。比如一个包含多个字典的数组,则需要通过NSData 中转,转换为字符串。存入cookieValue中。
重点5:iOS中的cookie不能有中文,需要encode后传入,相应的,如果JS端不能识别,则需要decode。保证安卓和iOS都能存入cookie。这里主要是前端人员的事务。需要沟通。
2-po代码
初始化WKWebView
-(WKWebView*)webV{
if (_webV==nil) {
WKWebViewConfiguration*configuration=[[WKWebViewConfiguration alloc]init];
// 设置偏好设置
configuration.preferences = [[WKPreferences alloc] init];
configuration.preferences.minimumFontSize = 10;
configuration.preferences.javaScriptCanOpenWindowsAutomatically = NO;
// 默认认为YES
configuration.preferences.javaScriptEnabled = YES;
configuration.userContentController = [[WKUserContentController alloc] init];
configuration.allowsInlineMediaPlayback = YES;
configuration.processPool = [[WKProcessPool alloc]init];
// web内容处理池
configuration.processPool = [[WKProcessPool alloc] init];
// LHX20181206 设定UserKey_cookie
NSDictionary *dictCookie_userKey = [NSDictionary dictionaryWithObjectsAndKeys:@"user_key", NSHTTPCookieName,
_dlModel.user_key, NSHTTPCookieValue,
@"/", NSHTTPCookiePath,
self.uustr, NSHTTPCookieDomain,nil];
NSHTTPCookie *cookieUserKey = [NSHTTPCookie cookieWithProperties:dictCookie_userKey];
// LHX20181206 设定UserKey_cookie
NSDictionary *dictCookie_loToken = [NSDictionary dictionaryWithObjectsAndKeys:@"loToken"