WKWebView 的cookie 注入

WKWebView 同UIWebView 的cookie 管理機(jī)制還是不一樣的。

UIWebView 、AFN 等等吧,可以通過?NSHTTPCookieStorage (單例類)統(tǒng)一管理,設(shè)置不同的域名、不同的cookieName、cookieValue。 ?

?WKWebView 沒有用?NSHTTPCookieStorage 這個(gè)類管理cookie。所以想要給?WKWebView 注入cookie,有以下方法

1、JS注入 ? WKWebView初始化

WKUserContentController *userContentController = WKUserContentController.new;

?WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource:@"document.cookie ='cookieName=cookieValue';"?injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]; ? ? ? ??

?[userContentController addUserScript:cookieScript];

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

config.userContentController = userContentController;

WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0 , 100, 200 ) configuration:config ];


在WKWebView 初始化的時(shí)候,通過配置類,實(shí)現(xiàn)了注入cookie。

2、JS 注入 WKWebView 代理方法

?//js 注入cookie ? ? ? ?

?[_webView evaluateJavaScript:@"document.cookie ='cookieName=cookieValue';" completionHandler:^(id result, NSError *error) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????//注入成功

}];

ps:如果進(jìn)入當(dāng)前頁面就需要狀態(tài)的時(shí)候,需要在初始化的時(shí)候?qū)懭隿ookie。在代理方法,?-(void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler 里加入應(yīng)該也可以,這點(diǎn)沒有驗(yàn)證。

3、iOS 11 推出?WKHTTPCookieStore

?if (@available(iOS 11.0, *)) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ?NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:@{NSHTTPCookieName: @"cookeName",NSHTTPCookieValue:@"cookieValue",NSHTTPCookieDomain:@"cookieDomain",NSHTTPCookiePath: @"/" }];

????[_webView.configuration.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:^{ }]; ?

}

4、在request 請(qǐng)求里加cookie

NSURL *url = [NSURL URLWithString:_urlStr]; ? ??

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

?[request setValue:@"cookieName=cookieValue" forHTTPHeaderField:@"Cookie"];

?[_webView loadRequest:request];

NOTICE:

JS注入的Cookie,比如PHP代碼在Cookie容器中取是取不到的, javascript document.cookie能讀取到,瀏覽器中也能看到。

NSMutableURLRequest 注入的PHP等動(dòng)態(tài)語言直接能從$_COOKIE對(duì)象中獲取到,但是js讀取不到,瀏覽器也看不到

所以合理的辦法讓js,php,瀏覽器都能讀取到相同的Cookie方法就是創(chuàng)建WebView的時(shí)候javascript注入Cookie,一開始發(fā)送NSMutableURLRequest請(qǐng)求的時(shí)候也要加上Cookie,并且保證兩個(gè)地方的設(shè)置的cookie一致。

參考:http://www.skyfox.org/ios-wkwebview-cookie-opration.html

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

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

  • 前言 關(guān)于UIWebView的介紹,相信看過上文的小伙伴們,已經(jīng)大概清楚了吧,如果有問題,歡迎提問。 本文是本系列...
    CoderLF閱讀 9,345評(píng)論 2 12
  • 上篇文章中提到過初識(shí)Session和Cookie,了解了它們的原理和項(xiàng)目中的作用,但是并沒有實(shí)際用到過,直到前幾天...
    風(fēng)之谷等風(fēng)來閱讀 9,138評(píng)論 12 16
  • 1、WKWebView 白屏問題WKWebView 自詡擁有更快的加載速度,更低的內(nèi)存占用,但實(shí)際上 WKWebV...
    iosRn閱讀 2,172評(píng)論 1 10
  • 1、WKWebView 白屏問題WKWebView 自詡擁有更快的加載速度,更低的內(nèi)存占用,但實(shí)際上 WKWebV...
    無名感恩閱讀 2,281評(píng)論 0 3
  • WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView 組件,用以替代 UIKit 中笨...
    Aiana閱讀 4,808評(píng)論 1 8

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