WebKit—WKWebView簡介

WKWebView是現(xiàn)代WebKit API在iOS8OS 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:

WKScriptMessageHandler:

其中一些類中的枚舉狀態(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);

參考鏈接:

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容