WKWebView 的一些坑
现在app大多由h5页面展示,我们使用wkwebivew代替uiwebview,减少了内存占用,但同时也有些坑,下面罗列我遇到的坑:
1、wkwebiew cookie丢失
在h5跳转h5时,cookie会丢失,导致登录无效。解决方法:
- (void)webView:(WKWebView*)webView didFinishNavigation:(null_unspecifiedWKNavigation*)navigation {
NSHTTPCookieStorage*cookieStorage = [NSHTTPCookieStoragesharedHTTPCookieStorage];
//js函数
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*cookieincookieStorage.cookies) {
NSString*excuteJSString = [NSStringstringWithFormat:@"setCookie('%@', '%@', 1);", cookie.name, cookie.value];
[JSCookieStringappendString:excuteJSString];
}
//执行js
[webViewevaluateJavaScript:JSCookieStringcompletionHandler:^(idobj,NSError*_Nullableerror) {
NSLog(@"%@",error);
}];
2、白屏问题:
当内存占用过多时,会出现白屏问题,找了好久的解决方法:尝试的方法
1)判断webview的title是否存在,不存在重新加载:
if(_webview.title==nil) {
[_webviewreload];
}
然后加上这个方法还是会出现白屏,所以尝试下面的解决方法:
2)判断webview body是否存在
[webviewevaluateJavaScript:@"document.querySelector('body').innerHTML"completionHandler:^(idresult,NSError*error) {
if(!result || ([resultisKindOfClass:[NSStringclass]] && [((NSString*)result)length] ==0)) {
[webviewreload];
}
}];
这个方法加上目前还没测出白屏。😁