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