wkwebView書き込みCookie

通常の状況では、wkwebViewはリクエストを開始するために手動でCookieを設定する必要はありません。

iOSシステムのプロセスには共通のNSHTTHCookieStorageがあるため、リクエストを送信すると、

Cookieを渡しますが、コードに直接Cookieを手動で書き込む必要がある状況が発生します。

1jsコードに書き込む必要のあるCookieパラメーターをスプライスします

//配置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;
}

2webviewを初期化するときにjsを挿入します

            WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource:[self cookieJavaScriptString] injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
            [userContentController addUserScript:cookieScript];

3 Webページの読み込みが完了したら、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