为何使用WKWebView
App开发过程中不可避免的会用到加载网页,从iOS2开始,我们一直使用的是UIWebView
加载,这个网页加载器加载速度慢、占用内存多、优化困难,如果加载网页过多,还可能因为过度占用内存而被系统kill
掉。
iOS8以后,Apple推出了WebKit
,提供了替换UIWebView
的组件WKWebView
,毫无疑问WKWebView
将逐步取代笨重的UIWebView
。
WKWebView新特性
- 在性能、稳定性、功能方面有很大提升,网页加载速度快、内存占用少
- 支持更多的HTML5特性
- 与Safari相同的JavaScript引擎
- 官方宣称的高达60fps的滚动刷新率以及内置手势
- 增加加载进度属性:estimatedProgress
- 将UIWebViewDelegate与UIWebView重构成了14类与3个协议(查看苹果官方文档);
WKWebView使用说明
初始化方法分两种(记得导入#import <WebKit/WebKit.h>
)
1 | // 默认初始化 |
加载网页与HTML代码的方式与UIWebView相同
1 | WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds]; |
网页导航刷新相关属性及方法
1 | // 是否可以后退 |
WKWebView代理方法
1.WKNavigationDelegate
该代理提供的方法,可以用来追踪加载过程(页面开始加载、加载完成、加载失败)、决定是否执行跳转。
用来追踪加载过程(页面开始加载、加载完成、加载失败)的方法:
1 | // 页面开始加载时调用 |
页面跳转的代理方法:
1 | // 接收到服务器跳转请求之后调用 |
2.WKUIDelegate
UI界面相关,原生控件支持,三种提示框:输入、确认、警告。首先将web提示框拦截然后再做处理。
1 | // 创建一个新的WebView |
3.WKScriptMessageHandler
这个协议中包含一个必须实现的方法,这个方法是提高App与web端交互的关键,它可以直接将接收到的JS脚本转为OC或Swift对象。提供从网页中接收消息的回调方法。
1 | // 从web界面中接收到一个脚本时调用 |
小技巧
- 自适应屏幕宽度
1 | NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"; |
- 获取页面高度
1 | #pragma mark - WKNavigationDelegate |
- 图片自适应设备宽度
1 | NSString *js = @"function imgAutoFit() { \ |