美文网首页
WKWebView如何添加cookie

WKWebView如何添加cookie

作者: 也嘉 | 来源:发表于2017-10-23 10:56 被阅读492次

原文发布在个人站点WKWebView处理cookies

最近做了一个项目,加载网页使用的是WKWebView,网页需要同步客户端登录后的cookie。

UIWebView加载cookie简述

在之前使用UIWebView时,因为UIWebView共用NSHTTPCookieStorage的cookie,h5页面同步cookie不需要做特别的处理。一般的流程是:登录请求成功后Cookie会自动保存在NSHTTPCookieStorage,然后将NSHTTPCookieStorage的cookie取出保存到NSUserDefaults,下次打开应用就将NSUserDefaults中保存的cookie设置到NSHTTPCookieStorage中,然后整个项目中发送的网络请求就都会带有设置的cookie。

当然UIWebView也可以设置request [request addValue:cookieValue forHTTPHeaderField:@"Cookie"]; 来添加cookie。

WKWebView添加cookie

到WKWebView后,它不会去获取NSHTTPCookieStorage中的cookie,就需要我们自己设置了。

首先在loadRequest的时候给request设置cookie

NSMutableString *cookieValue = [[NSMutableString alloc] initWithString:@"document.cookie = 'from=ios';"];
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];

for (NSHTTPCookie *cookie in [cookieJar cookies]) {
    NSString *appendString = [NSString stringWithFormat:@"%@=%@;", cookie.name, cookie.value];
    [cookieValue appendString:appendString];
}

[request addValue:cookieValue forHTTPHeaderField:@"Cookie"];

这样做了之后,在打开页面时是带有cookie的,也就是已登录的状态,但是当你点页面的链接跳转,新的页面却没有带上cookie。我们就要在初始化WKWebView时,在configuration中设置带有cookie的userContent。代码:

//各个WKWebview使用同一个WKProcesspool
config = [[WKWebViewConfiguration alloc] init];
config.preferences = [[WKPreferences alloc] init];
config.preferences.minimumFontSize = 10.0;
config.preferences.javaScriptEnabled = YES;
config.preferences.javaScriptCanOpenWindowsAutomatically = NO;
config.processPool = [[WKProcessPool alloc] init];

//添加Cookie
NSMutableString *cookieValue = [[NSMutableString alloc] initWithString:@"document.cookie = 'from=ios';"];
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];

for (NSHTTPCookie *cookie in [cookieJar cookies]) {
    NSString *appendString = [NSString stringWithFormat:@"%@=%@;", cookie.name, cookie.value];
    [cookieValue appendFormat:@"document.cookie='%@';", appendString];
}

WKUserContentController* userContentController = WKUserContentController.new;
WKUserScript * cookieScript = [[WKUserScript alloc]
                                initWithSource: cookieValue
                                injectionTime:WKUserScriptInjectionTimeAtDocumentStart                                  
                                forMainFrameOnly:NO];
[userContentController addUserScript:cookieScript];

config.userContentController = userContentController;

相关文章

  • WKWebView如何添加cookie

    原文发布在个人站点:WKWebView处理cookies 最近做了一个项目,加载网页使用的是WKWebView,网...

  • WKWebview ajax添加cookie

    wkwebview 用WKUserScript添加cookie,cookie的source里必须带上 path

  • ios WKWebView Cookie

    WKWebView Cookie 加载cookie有两种方式1、使用js注入的形式添加2、使用请求头的形式添加 一...

  • iOS WKWebView添加Cookie

    网络请求添加Cookie都需要在request的时候添加 给request增加请求头 WKWebView加载请求

  • WKWebView添加Cookie总结

    WKWebView是苹果在iOS8 开始推出的webView组件,用来替代UIWebView内存占用高的问题,虽然...

  • IOS WKWebView添加cookie

    在网络请求中,有一部分需要添加cookie,接下来就把为web添加cookie的方法小小列举一下,其实所有的要添加...

  • iOS WKWebView 添加 cookie

    今天遇到了一个问题,项目中需要加载web界面,使用WKWebView耗内存小、加载速度快、与JS的交互好,所以就尝...

  • WKWebView请求添加Cookie

    WKWebView发送请求时不会把HTTPCookieStorage中的cookie写入请求中需要手动添加。 iO...

  • iOS WKWebView添加Cookie

    一、系统方法设置: 系统方法就不说了,百度一大推,但是听说WKWebView设置Cookie有bug。 二、第三方...

  • iOS开发-WKWebView设置cookie

    1.初始化WKWebView时设置cookie 2.WKWebView已经存在时,设置cookie

网友评论

      本文标题:WKWebView如何添加cookie

      本文链接:https://www.haomeiwen.com/subject/liiouxtx.html