wkwebView 写入 cookie

正常情况下,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的写入

猜你喜欢

转载自blog.csdn.net/LIUXIAOXIAOBO/article/details/114014956