iOS WKWebView 添加 cookie

今天遇到了一個(gè)問題,項(xiàng)目中需要加載web界面,使用WKWebView耗內(nèi)存小、加載速度快、與JS的交互好,所以就嘗試使用WKWebView,就遇到了一個(gè)問題:request請求的url并不是原生的html,而是從服務(wù)器端獲取到的接口,只有在用戶登錄的情況下才會加載,如下圖所示:

加載不出來想要的html界面,網(wǎng)上查了好久也大概了解到時(shí)cookie的原因,需要獲取到cookie并添加到request請求中,下面是我的解決辦法:

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

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

WKPreferences *preferences = [WKPreferences new];

webConfiguration.preferences = preferences;

//ESWeakSelf:這是一個(gè)宏,防止MessageHandler循環(huán)引用

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;

}

}

//下面這個(gè)取cookie的方法,每個(gè)項(xiàng)目的name值可能不一樣,要要斷點(diǎn)查看:

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));

}];

以上就是我的解決辦法,希望會對大家有些幫助,么么

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 關(guān)于UIWebView的介紹,相信看過上文的小伙伴們,已經(jīng)大概清楚了吧,如果有問題,歡迎提問。 本文是本系列...
    CoderLF閱讀 9,338評論 2 12
  • 前言 關(guān)于UIWebView的介紹,相信看過上文的小伙伴們,已經(jīng)大概清楚了吧,如果有問題,歡迎提問。 本文是本系列...
    Dark_Angel閱讀 29,496評論 67 291
  • 1、加載網(wǎng)頁 WKWebView *webView = [[WKWebView alloc] initWithFr...
    LearningCoding閱讀 3,266評論 0 2
  • 公司開始讓做一個(gè)新iOS項(xiàng)目,由于蘋果的更新需要每次發(fā)版本審核,沒法像服務(wù)器一樣實(shí)時(shí)更新,技術(shù)部就討論出原生+HT...
    奶茶007閱讀 1,870評論 16 9
  • 對于做飯這件事我以前也是不懂得去享受它,但做得時(shí)候還是會去精益求精,色香味俱全,后來覺得不懂得去享受它其實(shí)就是一種...
    陳默獨(dú)閱讀 136評論 0 0

友情鏈接更多精彩內(nèi)容