WKWebView是現(xiàn)代WebKit API在
iOS8
和OS X Yosemite
應(yīng)用中的核心部分个初。它代替了UIKit的UIWebView和APPKit中的WebView,提供了統(tǒng)一的跨雙平臺(tái)API。
UIWebView&UIWebDelegate這兩個(gè)東西在WKWebKit中被重構(gòu)成16個(gè)類
策州、3個(gè)協(xié)議
Classes:
- WKBackForwardList:歷史記錄列表埠褪,可以通過(guò)后退和前進(jìn)動(dòng)作訪問(wèn)到懦砂;(- itemAtIndex: 該類中唯一方法,用于返回項(xiàng)目在指定的距離當(dāng)前項(xiàng)目组橄。還有backItem荞膘、currentItem、forwardItem玉工、backList羽资、forwardList屬性)
- WKBackForwardListItem:webView中后退列表里的某一網(wǎng)頁(yè);(有URL遵班、title屠升、initialURL三個(gè)屬性)
- WKFrameInfo:包含一個(gè)框架在一個(gè)網(wǎng)頁(yè)的信息;(有mainFrame狭郑、request腹暖、securityOrigin三個(gè)屬性,其中securityOrigin是一個(gè)WKSecurityOrigin對(duì)象屬性翰萨,iOS9之后可使用脏答,是由一個(gè)主機(jī)名稱,協(xié)議和端口號(hào)組成。)
- WKNavigation:包含一個(gè)網(wǎng)頁(yè)加載進(jìn)度信息殖告;
- WKNavigationAction:包含可能讓網(wǎng)頁(yè)導(dǎo)航變化的信息阿蝶,用于判斷是否做出導(dǎo)航變化;(值得注意的是可能會(huì)常用的 WKNavigationType這個(gè)枚舉)
- WKNavigationResponse:包含可能讓網(wǎng)頁(yè)導(dǎo)航變化的返回內(nèi)容信息黄绩,用于判斷是否做出導(dǎo)航變化羡洁;
- WKPreferences:概括一個(gè)webView的偏好設(shè)置;( minimumFontSize爽丹、 javaScriptEnabled筑煮、 javaScriptCanOpenWindowsAutomatically三個(gè)屬性,值得注意的是后兩個(gè)屬性粤蝎,一個(gè)決定是否啟用javaScript,另一個(gè)是在沒(méi)有用戶交互的情況下咆瘟,是否JavaScript可以打開(kāi)windows)
- WKProcessPool:表示一個(gè)web內(nèi)容加載池;
- WKUserContentController:提供使用JavaScript post信息和注射script的方法诽里。(- addScriptMessageHandler:name: 添加一個(gè)消息處理程序腳本 - addUserScript: 添加一個(gè)用戶腳本 - removeAllUserScripts remove所有用戶腳本 —removeScriptMessageHandlerForName: 刪除一個(gè)消息處理程序的腳本 和一個(gè)userScript屬性: 與用戶相關(guān)聯(lián)的用戶腳本內(nèi)容控制器)
- WKScriptMessage: 包含網(wǎng)頁(yè)發(fā)出的信息袒餐。(body、webView谤狡、frameInfo灸眼、name)
- WKUserScript:表示可以被網(wǎng)頁(yè)接受的用戶腳本。
- WKWebViewConfiguration: 初始化 webview 的設(shè)置墓懂。(- initWithSource:injectionTime:forMainFrameOnly: 返回一個(gè)初始化用戶腳本,可以添加到一個(gè)用戶內(nèi)容控制器 還有source焰宣、injectionTime、forMainFrameOnly)
- WKWindowFeatures:指定加載新網(wǎng)頁(yè)時(shí)的窗口屬性捕仔。(全是窗口屬性)
- WKWebViewConfiguration:對(duì)象是屬性的集合用來(lái)初始化一個(gè)web視圖匕积。(屬性比較多,不過(guò)這個(gè)對(duì)象在初始化web視圖的時(shí)候必須會(huì)用到)
- 還有WKWebsiteDataStore&WKWebsiteDataRecord兩個(gè)類
Protocols:
- WKNavigationDelegate:提供了追蹤主窗口網(wǎng)頁(yè)加載過(guò)程和判斷主窗口和子窗口是否進(jìn)行頁(yè)面加載新頁(yè)面的相關(guān)方法榜跌。
- WKScriptMessageHandler: 提供從網(wǎng)頁(yè)中收消息的回調(diào)方法闪唆。
- WKUIDelegate: 提供用原生控件顯示網(wǎng)頁(yè)的方法回調(diào)。
WKNavigationDelegate:
- - webView:didCommitNavigation: 主框架在內(nèi)容開(kāi)始到達(dá)時(shí)調(diào)用钓葫。
- - webView:didFailNavigation:withError: 主框架導(dǎo)航發(fā)生錯(cuò)誤時(shí)調(diào)用悄蕾。
- - webView:didFailProvisionalNavigation:withError: 主框架在開(kāi)始加載數(shù)據(jù)出現(xiàn)錯(cuò)誤時(shí)調(diào)用
- - webView:didFinishNavigation: 主框架導(dǎo)航完成時(shí)調(diào)用
- - webView:didReceiveAuthenticationChallenge:completionHandler: web視圖需要響應(yīng)身份驗(yàn)證時(shí)調(diào)用
- - webView:didReceiveServerRedirectForProvisionalNavigation: 主服務(wù)器接受到重定向時(shí)調(diào)用
- - webView:didStartProvisionalNavigation: 主框架導(dǎo)航開(kāi)始時(shí)調(diào)用
- - webView:decidePolicyForNavigationAction:decisionHandler: 決定是否允許或取消一個(gè)導(dǎo)航
- - webView:decidePolicyForNavigationResponse:decisionHandler: 決定是否允許或取消一個(gè)導(dǎo)航后其反應(yīng)是已知的
WKScriptMessageHandler:
-
userContentController:didReceiveScriptMessage:(required)一個(gè)腳本從一個(gè)網(wǎng)頁(yè)接收到消息時(shí)調(diào)用
WKUIDelegate: - webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:創(chuàng)建一個(gè)新的webView
- webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler: 顯示一個(gè)JavaScript警告面板。
- webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:顯示一個(gè)JavaScript確認(rèn)面板础浮。
- webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler: 顯示一個(gè)JavaScript文本輸入面板帆调。
其中一些類中的枚舉狀態(tài):
typedef NS_ENUM(NSInteger, WKNavigationType) {
WKNavigationTypeLinkActivated,//鏈接的href屬性被用戶激活。
WKNavigationTypeFormSubmitted,//一個(gè)表單提交豆同。
WKNavigationTypeBackForward,//回到前面的條目列表請(qǐng)求番刊。
WKNavigationTypeReload,//網(wǎng)頁(yè)加載。
WKNavigationTypeFormResubmitted,//一個(gè)表單提交(例如通過(guò)前進(jìn),后退,或重新加載)影锈。
WKNavigationTypeOther = -1,//導(dǎo)航是發(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,//取消導(dǎo)航
WKNavigationActionPolicyAllow,//允許導(dǎo)航繼續(xù)
} NS_ENUM_AVAILABLE(10_10, 8_0);
typedef NS_ENUM(NSInteger, WKNavigationResponsePolicy) {
WKNavigationResponsePolicyCancel,//取消導(dǎo)航
WKNavigationResponsePolicyAllow,//允許導(dǎo)航繼續(xù)
} NS_ENUM_AVAILABLE(10_10, 8_0);
參考鏈接: