iOS WKWebView 添加 cookie

今天遇到了一个问题,项目中需要加载web界面,使用WKWebView耗内存小、加载速度快、与JS的交互好,所以就尝试使用WKWebView,就遇到了一个问题:request请求的url并不是原生的html,而是从服务器端获取到的接口,只有在用户登录的情况下才会加载,如下图所示:

加载不出来想要的html界面,网上查了好久也大概了解到时cookie的原因,需要获取到cookie并添加到request请求中,下面是我的解决办法:

WKWebViewConfiguration* webConfiguration = [[WKWebViewConfiguration alloc] init];

WKUserContentController* contentController = [[WKUserContentController alloc] init];

WKPreferences *preferences = [WKPreferences new];

webConfiguration.preferences = preferences;

//ESWeakSelf:这是一个宏,防止MessageHandler循环引用

ESWeakSelf

[contentController addScriptMessageHandler:__weakSelf name:@"rule"];

[contentController addScriptMessageHandler:__weakSelf name:@"minimalInvasiveActivityProtocolClick"];

self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight-64) configuration:webConfiguration];

self.webView.navigationDelegate = self;

self.webView.UIDelegate = self;

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.urlString]];

/******************************获取cookies***********************************/

NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];

NSHTTPCookie* realCookie = nil;

for (NSHTTPCookie* cookie in cookies) {

//[NSObject baseURLStr] :接口地址的请求头

NSRange range = [[NSObject baseURLStr] rangeOfString:cookie.domain];

//如过找到了

if (range.location != NSNotFound) {

realCookie = cookie;

break;

}

}

//下面这个取cookie的方法,每个项目的name值可能不一样,要要断点查看:

NSString* cookieValue = [NSString stringWithFormat:@"app=%@;",realCookie.value];

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

/******************************获取cookies***********************************/

if (self.urlString) {

[self.webView loadRequest:request];

}

else if (self.htmlString)

{

[self.webView loadHTMLString:self.htmlString baseURL:nil];

}

[self.view addSubview:self.webView];

[self.webView mas_makeConstraints:^(MASConstraintMaker *make) {

make.edges.mas_offset(UIEdgeInsetsMake(0, 0, 0, 0));

}];

以上就是我的解决办法,希望会对大家有些帮助,么么

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 关于UIWebView的介绍,相信看过上文的小伙伴们,已经大概清楚了吧,如果有问题,欢迎提问。 本文是本系列...
    CoderLF阅读 9,016评论 2 12
  • 前言 关于UIWebView的介绍,相信看过上文的小伙伴们,已经大概清楚了吧,如果有问题,欢迎提问。 本文是本系列...
    Dark_Angel阅读 29,031评论 67 291
  • 1、加载网页 WKWebView *webView = [[WKWebView alloc] initWithFr...
    LearningCoding阅读 3,150评论 0 2
  • 公司开始让做一个新iOS项目,由于苹果的更新需要每次发版本审核,没法像服务器一样实时更新,技术部就讨论出原生+HT...
    奶茶007阅读 1,799评论 16 9
  • 对于做饭这件事我以前也是不懂得去享受它,但做得时候还是会去精益求精,色香味俱全,后来觉得不懂得去享受它其实就是一种...
    陈默独阅读 104评论 0 0