WKWebView
# 概述
WKWebView
是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用、内存泄漏的 UIWebView。WKWebView 拥有60fps滚动刷新率、和 safari 相同的 JavaScript 引擎等优势。支持最新的Webkit框架功能,使用与Safari中一样的Nitro JavaScript引擎,大大提高了页面js执行速度。
# 兼容性
WKWebView
是苹果iOS8.0之后提供的,发布与2014年9月,距今已经4年。
现在使用ios10.0以下的系统已经很少了,拒最新统计,iPhone OS8.0及以下的系统占比已经不足1%,已经可以忽略不计了,不能让1%
的用户影响99%
的用户体验。所以WKWebView在使用兼容上已经没有任何阻碍了。
WKWebView的优缺点
# 优点
性能和稳定性的大幅提高
内存占用的减少,大概是UIWebView的1/4 - 1/3 参考链接
-
支持更多HTML5、JS特性
- 允许JavaScript的Nitro的库加载并使用(移动设备的 Safari 使用 Nitro 引擎,但是 UIWebView 不包括 JIT 编译,所以不支持,体验会慢一些)
60fps的刷新率以及内置手势的支持
增加了新的代理方法,可控性更高
-
estimatedProgress属性实现进度条
- 不需要像UIWebView一样自己做假进度条(通过NJKWebViewProgress和双层代理技术实现),技术复杂度和代码量,根贴近实际加载进度优化好的多。
-
JS交互上更方便
-
可以和js直接互调函数,不像UIWebView需要第三方库WebViewJavascriptBridge来协助处理和js的交互。
addScriptMessageHandler//OC注册供JS调用的方法 [[_webView configuration].userContentController addScriptMessageHandler:self name:@"methodName"]; //OC在JS调用方法做的处理 - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { NSLog(@"JS 调用了 %@ 方法,传回参数 %@",message.name,message.body); } //JS调用 window.webkit.messageHandlers."methodName".postMessage(null); 1. 只接受一个参数,因此如果需要传递多个参数,可以将参数做成json字符串、字典、数组进行传递 2. ios的参数不能不传,哪怕只传个空字符串
-
# 缺点
- 不自带cookie
- 获取cookie
- 不支持自定义NSURLProtocol,否则无法发送POST参数