苹果在iOS8推出了一个新的框架WKWebKit
,更好地内存优化、更快的加载速度和更丰富的接口让它成为了开发者手中的香馍馍,替代UIWebView就变得顺理成章。
UIWebView&UIWebDelegate这两个东西在WKWebKit中被重构成16个类、3个协议
Classes:
WKBackForwardList
:历史记录列表,可以通过后退和前进动作访问到;(- itemAtIndex: 该类中唯一方法,用于返回项目在指定的距离当前项目。还有backItem、currentItem、forwardItem、backList、forwardList属性)
WKBackForwardListItem
:webView中后退列表里的某一网页;(有URL、title、initialURL三个属性)
WKFrameInfo
:包含一个框架在一个网页的信息;(有mainFrame、request、securityOrigin三个属性,其中securityOrigin是一个WKSecurityOrigin对象属性,iOS9之后可使用,是由一个主机名称,协议和端口号组成。)
WKNavigation
:包含一个网页加载进度信息;
WKNavigationAction
:包含可能让网页导航变化的信息,用于判断是否做出导航变化;(值得注意的是可能会常用的 WKNavigationType这个枚举)
WKNavigationResponse
:包含可能让网页导航变化的返回内容信息,用于判断是否做出导航变化;
WKPreferences
:概括一个webView的偏好设置;( minimumFontSize、 javaScriptEnabled、 javaScriptCanOpenWindowsAutomatically三个属性,值得注意的是后两个属性,一个决定是否启用javaScript,另一个是在没有用户交互的情况下,是否JavaScript可以打开windows)
WKProcessPool
:表示一个web内容加载池;
WKUserContentController
:提供使用JavaScript post信息和注射script的方法。(- addScriptMessageHandler:name: 添加一个消息处理程序脚本 - addUserScript: 添加一个用户脚本 removeAllUserScripts remove所有用户脚本 —removeScriptMessageHandlerForName: 删除一个消息处理程序的脚本 和一个userScript属性: 与用户相关联的用户脚本内容控制器)
WKScriptMessage
: 包含网页发出的信息。(body、webView、frameInfo、name)
WKUserScript
:表示可以被网页接受的用户脚本。
WKWebViewConfiguration
: 初始化 webview 的设置。(- initWithSource:injectionTime:forMainFrameOnly: 返回一个初始化用户脚本,可以添加到一个用户内容控制器 还有source、injectionTime、forMainFrameOnly)
WKWindowFeatures
:指定加载新网页时的窗口属性。(全是窗口属性)
WKWebViewConfiguration
:对象是属性的集合用来初始化一个web视图。(属性比较多,不过这个对象在初始化web视图的时候必须会用到)
- 还有WKWebsiteDataStore&WKWebsiteDataRecord两个类
Protocols:
WKNavigationDelegate
:提供了追踪主窗口网页加载过程和判断主窗口和子窗口是否进行页面加载新页面的相关方法。
WKScriptMessageHandler
: 提供从网页中收消息的回调方法。
WKUIDelegate
: 提供用原生控件显示网页的方法回调。
WKNavigationDelegate:
webView:didCommitNavigation
: 主框架在内容开始到达时调用。
webView:didFailNavigation:withError
: 主框架导航发生错误时调用。
webView:didFailProvisionalNavigation:withError
: 主框架在开始加载数据出现错误时调用
webView:didFinishNavigation
: 主框架导航完成时调用
webView:didReceiveAuthenticationChallenge:completionHandler
: web视图需要响应身份验证时调用
webView:didReceiveServerRedirectForProvisionalNavigation
: 主服务器接受到重定向时调用
webView:didStartProvisionalNavigation
: 主框架导航开始时调用
webView:decidePolicyForNavigationAction:decisionHandler
: 决定是否允许或取消一个导航
webView:decidePolicyForNavigationResponse:decisionHandler
: 决定是否允许或取消一个导航后其反应是已知的
WKScriptMessageHandler:
userContentController:didReceiveScriptMessage
:(required)一个脚本从一个网页接收到消息时调用
WKUIDelegate:
webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures
:创建一个新的webView
webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler
: 显示一个JavaScript警告面板。
webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler
:显示一个JavaScript确认面板。
webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler
: 显示一个JavaScript文本输入面板。
其中一些类中的枚举状态:
typedef NS_ENUM(NSInteger, WKNavigationType) {
WKNavigationTypeLinkActivated,//链接的href属性被用户激活。
WKNavigationTypeFormSubmitted,//一个表单提交。
WKNavigationTypeBackForward,//回到前面的条目列表请求。
WKNavigationTypeReload,//网页加载。
WKNavigationTypeFormResubmitted,//一个表单提交(例如通过前进,后退,或重新加载)。
WKNavigationTypeOther = -1,//导航是发生一些其他原因。
} NS_ENUM_AVAILABLE(10_10, 8_0);
typedef NS_ENUM(NSInteger, WKUserScriptInjectionTime) {
WKUserScriptInjectionTimeAtDocumentStart,//注入后的脚本创建文档元素,但在其他任何内容已经被加载。
WKUserScriptInjectionTimeAtDocumentEnd//注入脚本文档完成加载后,但在任何子资源可能完成加载。
}
NS_ENUM_AVAILABLE(10_10, 8_0);
typedef NS_ENUM(NSInteger, WKNavigationActionPolicy) {
WKNavigationActionPolicyCancel,//取消导航
WKNavigationActionPolicyAllow,//允许导航继续
} NS_ENUM_AVAILABLE(10_10, 8_0);
typedef NS_ENUM(NSInteger, WKNavigationResponsePolicy) {
WKNavigationResponsePolicyCancel,//取消导航
WKNavigationResponsePolicyAllow,//允许导航继续
} NS_ENUM_AVAILABLE(10_10, 8_0);