欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

iOSWKWebViewCookie同步

UIWebView簡(jiǎn)介

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

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

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

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

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

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

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

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"]; // 加載請(qǐng)求 [self.wk_webView loadRequest:requestObj];

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

注意:我們這里實(shí)際上重新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); }

方法評(píng)價(jià)

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

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

分享標(biāo)題:iOSWKWebViewCookie同步
文章出自:http://chinadenli.net/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)