#
WKWebView是苹果在iOS 8之后推出的框架WebKit中的浏览器控件, 其加载速度比UIWebView快了许多, 但内存占用率却下降很多, 也解决了加载网页时的内存泄露问题. 现在的项目大多数只需适配到iOS 8, 所以用WKWebView来替换项目中的UIWebView是很有必要的.
WKWebView的使用主要涉及下面几个类:
- WKWebView
- WKWebViewConfiguration
- WKUserScript
- WKUserContentController
- WKWebsiteDataStore
以及两个代理:
- WKNavigationDelegate
- WKUIDelegate
1. WKWebView
1.1 常用属性
1 | // 导航代理 |
1.2 一些方法:
1 | // 带配置信息的初始化方法 |
2. WKWebViewConfiguration
1 | // 通过此属性来执行JavaScript代码来修改页面的行为 |
3. WKUserContentController
WKUserContentController 是JavaScript与原生进行交互的桥梁, 主要使用的方法有:
1 | // 注入JavaScript与原生交互协议 |
使用WKUserContentController注入的交互协议, 需要遵循WKScriptMessageHandler协议, 在其协议方法中获取JavaScript端传递的事件和参数:
1 | - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message; |
WKScriptMessage包含了传递的协议名称及参数, 主要从下面的属性中获取:
1 | // 协议名称, 即上面的add方法传递的name |
4. WKUserScript
WKUserScript用于往加载的页面中添加额外需要执行的JavaScript代码, 主要是一个初始化方法:
1 | /* |
5. WKUIDelegate
这个代理方法, 主要是用来处理使用系统的弹框来替换JS中的一些弹框的,比如: 警告框, 选择框, 输入框, 主要使用的是下面三个代理方法:
1 | /** |
6. WKNavigationDelegate
1 | // 决定导航的动作,通常用于处理跨域的链接能否导航。 |
7. WKWebsiteDataStore
WKWebsiteDataStore 提供了网站所能使用的数据类型,包括 cookies,硬盘缓存,内存缓存活在一些WebSQL的数据持久化和本地持久化。可通过 WKWebViewConfiguration类的属性 websiteDataStore 进行相关的设置。WKWebsiteDataStore 相关的API也比较简单:
1 | // 默认的data store |
dataTyle
1 | // 硬盘缓存 |
WKWebsiteDataRecord
1 | // 展示名称, 通常是域名 |
简单应用
删除指定时间的所有类型数据
1 | NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes]; |
查找删除
1 | WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore]; |
查找删除特定的内容
1 | WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore]; |