WKWebView的session存儲

WKWebView不自動存儲session的問題(參考別人)

1)預(yù)加載一次HTML只加載不顯示(獲得Cookies,存儲傳遞)

//加載本地html

[self.webView loadHTMLString:@"" baseURL:[NSURL URLWithString:self.url]];

2)實現(xiàn)一下兩個代理方法(上面出現(xiàn)過),直接復(fù)制就行

// 頁面加載完成之后調(diào)用 ? -----?self.isFirstLoad:是否首次調(diào)用,首次調(diào)用才存儲


//下面是上圖的代碼,直接復(fù)制即可

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{

if (!self.isFirstLoad) {

//取出cookie

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

//js函數(shù)

NSString *JSFuncString =

@"function setCookie(name,value,expires)\

{\

var oDate=new Date();\

oDate.setDate(oDate.getDate()+expires);\

document.cookie=name+'='+value+';expires='+oDate+';path=/'\

}\

function getCookie(name)\

{\

var arr = document.cookie.match(new RegExp('(^| )'+name+'=({FNXX==XXFN}*)(;|$)'));\

if(arr != null) return unescape(arr[2]); return null;\

}\

function delCookie(name)\

{\

var exp = new Date();\

exp.setTime(exp.getTime() - 1);\

var cval=getCookie(name);\

if(cval!=null) document.cookie= name + '='+cval+';expires='+exp.toGMTString();\

}";

//拼湊js字符串

NSMutableString *JSCookieString = JSFuncString.mutableCopy;

for (NSHTTPCookie *cookie in cookieStorage.cookies) {

if (![cookie.name isEqualToString:@"__cust"]) {

NSString *excuteJSString = [NSString stringWithFormat:@"setCookie('%@', '%@', 1);", cookie.name, cookie.value];

[JSCookieString appendString:excuteJSString];

}

}

//執(zhí)行js

[webView evaluateJavaScript:JSCookieString completionHandler:^(id obj, NSError * _Nullable error) {

[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.url]]];

}];

self.isFirstLoad = YES;

}

}

//--------------- 在收到響應(yīng)后,決定是否跳轉(zhuǎn)


//以下是上圖的代碼

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{

//存儲session

NSHTTPURLResponse *response = (NSHTTPURLResponse *)navigationResponse.response;

NSArray *cookies =[NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:response.URL];

for (NSHTTPCookie *cookie in cookies) {

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

}

//允許跳轉(zhuǎn)

decisionHandler(WKNavigationResponsePolicyAllow);

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容