技术分享

WKWebView 的一些坑

2017-08-14  本文已影响17人  驰宝

现在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];

}

}];

这个方法加上目前还没测出白屏。😁

上一篇下一篇

猜你喜欢

热点阅读