WKWebView是現(xiàn)代WebKit API在
iOS8
和OS X Yosemite
應用中的核心部分。它代替了UIKit的UIWebView和APPKit中的WebView,提供了統(tǒng)一的跨雙平臺API。
WebKit
UIWebView&UIWebDelegate這兩個東西在WKWebKit中被重構成16個類
、3個協(xié)議
Classes:
- WKBackForwardList:歷史記錄列表,可以通過后退和前進動作訪問到;(- itemAtIndex: 該類中唯一方法,用于返回項目在指定的距離當前項目。還有backItem、currentItem、forwardItem、backList、forwardList屬性)
- WKBackForwardListItem:webView中后退列表里的某一網(wǎng)頁;(有URL、title、initialURL三個屬性)
- WKFrameInfo:包含一個框架在一個網(wǎng)頁的信息;(有mainFrame、request、securityOrigin三個屬性,其中securityOrigin是一個WKSecurityOrigin對象屬性,iOS9之后可使用,是由一個主機名稱,協(xié)議和端口號組成。)
- WKNavigation:包含一個網(wǎng)頁加載進度信息;
- WKNavigationAction:包含可能讓網(wǎng)頁導航變化的信息,用于判斷是否做出導航變化;(值得注意的是可能會常用的 WKNavigationType這個枚舉)
- WKNavigationResponse:包含可能讓網(wǎng)頁導航變化的返回內(nèi)容信息,用于判斷是否做出導航變化;
- WKPreferences:概括一個webView的偏好設置;( minimumFontSize、 javaScriptEnabled、 javaScriptCanOpenWindowsAutomatically三個屬性,值得注意的是后兩個屬性,一個決定是否啟用javaScript,另一個是在沒有用戶交互的情況下,是否JavaScript可以打開windows)
- WKProcessPool:表示一個web內(nèi)容加載池;
- WKUserContentController:提供使用JavaScript post信息和注射script的方法。(- addScriptMessageHandler:name: 添加一個消息處理程序腳本 - addUserScript: 添加一個用戶腳本 - removeAllUserScripts remove所有用戶腳本 —removeScriptMessageHandlerForName: 刪除一個消息處理程序的腳本 和一個userScript屬性: 與用戶相關聯(lián)的用戶腳本內(nèi)容控制器)
- WKScriptMessage: 包含網(wǎng)頁發(fā)出的信息。(body、webView、frameInfo、name)
- WKUserScript:表示可以被網(wǎng)頁接受的用戶腳本。
- WKWebViewConfiguration: 初始化 webview 的設置。(- initWithSource:injectionTime:forMainFrameOnly: 返回一個初始化用戶腳本,可以添加到一個用戶內(nèi)容控制器 還有source、injectionTime、forMainFrameOnly)
- WKWindowFeatures:指定加載新網(wǎng)頁時的窗口屬性。(全是窗口屬性)
- WKWebViewConfiguration:對象是屬性的集合用來初始化一個web視圖。(屬性比較多,不過這個對象在初始化web視圖的時候必須會用到)
- 還有WKWebsiteDataStore&WKWebsiteDataRecord兩個類
Protocols:
- WKNavigationDelegate:提供了追蹤主窗口網(wǎng)頁加載過程和判斷主窗口和子窗口是否進行頁面加載新頁面的相關方法。
- WKScriptMessageHandler: 提供從網(wǎng)頁中收消息的回調(diào)方法。
- WKUIDelegate: 提供用原生控件顯示網(wǎng)頁的方法回調(diào)。
WKNavigationDelegate:
- - webView:didCommitNavigation: 主框架在內(nèi)容開始到達時調(diào)用。
- - webView:didFailNavigation:withError: 主框架導航發(fā)生錯誤時調(diào)用。
- - webView:didFailProvisionalNavigation:withError: 主框架在開始加載數(shù)據(jù)出現(xiàn)錯誤時調(diào)用
- - webView:didFinishNavigation: 主框架導航完成時調(diào)用
- - webView:didReceiveAuthenticationChallenge:completionHandler: web視圖需要響應身份驗證時調(diào)用
- - webView:didReceiveServerRedirectForProvisionalNavigation: 主服務器接受到重定向時調(diào)用
- - webView:didStartProvisionalNavigation: 主框架導航開始時調(diào)用
- - webView:decidePolicyForNavigationAction:decisionHandler: 決定是否允許或取消一個導航
- - webView:decidePolicyForNavigationResponse:decisionHandler: 決定是否允許或取消一個導航后其反應是已知的
WKScriptMessageHandler:
-
userContentController:didReceiveScriptMessage:(required)一個腳本從一個網(wǎng)頁接收到消息時調(diào)用
WKUIDelegate: - webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:創(chuàng)建一個新的webView
- webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler: 顯示一個JavaScript警告面板。
- webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:顯示一個JavaScript確認面板。
- webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler: 顯示一個JavaScript文本輸入面板。
其中一些類中的枚舉狀態(tài):
typedef NS_ENUM(NSInteger, WKNavigationType) {
WKNavigationTypeLinkActivated,//鏈接的href屬性被用戶激活。
WKNavigationTypeFormSubmitted,//一個表單提交。
WKNavigationTypeBackForward,//回到前面的條目列表請求。
WKNavigationTypeReload,//網(wǎng)頁加載。
WKNavigationTypeFormResubmitted,//一個表單提交(例如通過前進,后退,或重新加載)。
WKNavigationTypeOther = -1,//導航是發(fā)生一些其他原因。
} NS_ENUM_AVAILABLE(10_10, 8_0);
typedef NS_ENUM(NSInteger, WKUserScriptInjectionTime) {
WKUserScriptInjectionTimeAtDocumentStart,//注入后的腳本創(chuàng)建文檔元素,但在其他任何內(nèi)容已經(jīng)被加載。
WKUserScriptInjectionTimeAtDocumentEnd//注入腳本文檔完成加載后,但在任何子資源可能完成加載。
}
NS_ENUM_AVAILABLE(10_10, 8_0);
typedef NS_ENUM(NSInteger, WKNavigationActionPolicy) {
WKNavigationActionPolicyCancel,//取消導航
WKNavigationActionPolicyAllow,//允許導航繼續(xù)
} NS_ENUM_AVAILABLE(10_10, 8_0);
typedef NS_ENUM(NSInteger, WKNavigationResponsePolicy) {
WKNavigationResponsePolicyCancel,//取消導航
WKNavigationResponsePolicyAllow,//允許導航繼續(xù)
} NS_ENUM_AVAILABLE(10_10, 8_0);
參考鏈接: