iOSWKWebViewCookie同步

UIWebView簡介

UIWebView從 iOS2 就有,iOS8 以后,蘋果推出了新框架 WebKit,提供了替換 UIWebView 的組件 WKWebView。各種 UIWebView 的性能問題沒有了,速度更快了,占用內(nèi)存少了,體驗更好了,下面列舉一些其它的優(yōu)勢:

岱山網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,岱山網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為岱山上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的岱山做網(wǎng)站的公司定做!

1、在性能、穩(wěn)定性、功能方面有很大提升(加載速度,內(nèi)存的提升誰用誰知道)
2、更多的支持 HTML5 的特性
3、官方宣稱的高達60fps的滾動刷新率以及內(nèi)置手勢
4、Safari 相同的 JavaScript 引擎
5、將 UIWebViewDelegate 與 UIWebView 拆分成了14類與3個協(xié)議,包含該更細節(jié)功能的實現(xiàn)。
相比之下,WKWebView 復(fù)雜得多,一些常用API如下:

@protocol WKNavigationDelegate <NSObject> @optional //請求之前,決定是否要跳轉(zhuǎn):用戶點擊網(wǎng)頁上的鏈接,需要打開新頁面時,將先調(diào)用這個方法。 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler; //接收到相應(yīng)數(shù)據(jù)后,決定是否跳轉(zhuǎn) - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler; //頁面開始加載時調(diào)用 - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation; // 主機地址被重定向時調(diào)用 - (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecified WKNavigation *)navigation; // 頁面加載失敗時調(diào)用 - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error; // 當(dāng)內(nèi)容開始返回時調(diào)用 - (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation; // 頁面加載完畢時調(diào)用 - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation; //跳轉(zhuǎn)失敗時調(diào)用 - (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error; // 如果需要證書驗證,與使用AFN進行HTTPS證書驗證是一樣的 - (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *__nullable credential))completionHandler; //9.0才能使用,web內(nèi)容處理中斷時會觸發(fā) - (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0); @end
Cookie同步

不同于UIWebView,WKWebView會忽視默認的網(wǎng)絡(luò)存儲, NSURLCache, NSHTTPCookieStorage, NSCredentialStorage。 目前是這樣的,WKWebView有自己的進程,同樣也有自己的存儲空間用來存儲cookie和cache, 其他的網(wǎng)絡(luò)類如NSURLConnection是無法訪問到的。 同時WKWebView發(fā)起的資源請求也是不經(jīng)過NSURLProtocol的,導(dǎo)致無法自定義請求。

方法1、同域名 C/S->B/S同步

如果C/S和B/S中,服務(wù)器端域名一致的話,在初始化WkWebView時同步即可

NSURL *url = [NSURL URLWithString:urlString]; NSMutableString *cookies = [NSMutableString string]; NSMutableURLRequest *requestObj = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10]; // 一般都只需要同步JSESSIONID,可視不同需求自己做更改 NSString * JSESSIONID; // 獲取本地所有的Cookie NSArray *tmp = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]; for (NSHTTPCookie * cookie in tmp) { if ([cookie.name isEqualToString:@"JSESSIONID"]) { JSESSIONID = cookie.value; break; } } if (JSESSIONID.length) { // 格式化Cookie [cookies appendFormat:@"JSESSIONID=%@;",JSESSIONID]; } // 注入Cookie [requestObj setValue:cookies forHTTPHeaderField:@"Cookie"]; // 加載請求 [self.wk_webView loadRequest:requestObj];

方法2、不同域名C/S->B/S

注意:我們這里實際上重新loadRequest了,正常情況下,我們應(yīng)該拷貝原來的request

NSMutableURLRequest*mutableRequest=[requestmutableCopy];//拷貝request

方法三3、B/S->C/S同步

在WkWebView接收到Response后,將Response帶的Cookies取出,然后直接放入[NSHTTPCookieStorage sharedHTTPCookieStorage] 容器中:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{ NSHTTPURLResponse *response = (NSHTTPURLResponse *)navigationResponse.response; NSArray *cookies =[NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:response.URL]; for (NSHTTPCookie *cookie in cookies) { [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; } decisionHandler(WKNavigationResponsePolicyAllow); }

方法評價

所有的同步過程中,我們發(fā)現(xiàn)使用了NSHTTPCookieStorage(當(dāng)然UIWebView也使用了此類自動同步),對于方法1而言,對于跳轉(zhuǎn)則會丟失cookie,因此實際使用中推薦2、3兩種方法。

注意:方法2給出的是個簡單例子,由于不同域名同步時,我們獲取到cookie種Domain和Path可能不同,否則,因此需要手動替換,否則同樣無法同步。

分享標(biāo)題:iOSWKWebViewCookie同步
文章出自:http://m.kartarina.com/article32/cpcisc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT靜態(tài)網(wǎng)站網(wǎng)站排名網(wǎng)站策劃品牌網(wǎng)站制作服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

主站蜘蛛池模板: 精品无码av一区二区三区| 久久精品无码一区二区三区免费| 小泽玛丽无码视频一区| 日日日日做夜夜夜夜无码| 亚洲熟妇无码另类久久久| 91精品久久久久久无码 | 国产精品亚洲专区无码不卡| 国产亚洲情侣一区二区无码AV | 人妻精品久久无码区| 最新中文字幕AV无码不卡| 亚洲精品无码国产片| 中文字幕精品无码亚洲字| 亚洲AV无码AV吞精久久| 色噜噜综合亚洲av中文无码| 亚洲精品无码99在线观看| 中日韩亚洲人成无码网站| 亚洲中文字幕无码日韩| 久久久精品人妻无码专区不卡| 色综合99久久久无码国产精品| 久久AV高清无码| 国产AV一区二区三区无码野战| 久久亚洲AV永久无码精品| yy111111少妇影院无码| 国产久热精品无码激情| 亚洲熟妇av午夜无码不卡| 无码人妻丰满熟妇区免费| 久久精品成人无码观看56| 久久久久无码国产精品不卡| 亚洲精品无码久久不卡| 亚洲Av无码乱码在线观看性色| 无码高潮爽到爆的喷水视频app| 亚洲国产成人精品无码区在线秒播| 亚洲VA成无码人在线观看天堂| 亚洲精品无码成人片在线观看 | 亚洲美免无码中文字幕在线| 亚洲AV日韩AV永久无码绿巨人 | 午夜福利无码一区二区| 亚洲欧洲国产综合AV无码久久| 精品亚洲AV无码一区二区三区 | 亚洲成a人在线看天堂无码| 亚洲AV蜜桃永久无码精品|