原文鏈接:supermokey
WKWebView
一個WKWebView對象展示交互的web內容,例如應用於app內的瀏覽器。你可以在你的App中使用WKWebView。
綜述
Important:
在iOS8.0和OS X 10.10以及以后,在App中開始使用WKWebView來加載web內容,不要(Do not use)使用UIWebView或者WebView。
當你使用 initWithFrame:configuration: 創建一個WKWebView對象之后,你就可以去加載web content了。使用 loadHTMLString:baseURL: 方法開始加載本地的HTML文件或者使用 loadRequest: 方法開始加載web內容。使用 :stopLoading 方法來結束加載,屬性 loading 可以來檢測當前web 視圖是否正在加載。對一個對象設置遵循WKUIDelegate協議來追蹤web內容的加載。
為了允許用戶能夠返回和前進來瀏覽網頁的歷史,使用 goBack 和 goForward 方法來進行操作(可以寫一個button,來后讓button調用goBack 和 goFroward)。使用 canGoBack 和 canGoForward 屬性來判斷網頁是否可以返回或者前進,從而來設置button能否點擊。
默認的,一個網頁時默認將數字轉換成手機號碼的。當點擊的時候,會撥打該號碼,要想關閉這個默認的行為,可以設置dataDetectorTypes屬性的WKDtaDetectorTypes字段不包含WKDataDetectorTypePhoneNumber標識。
你也可以使用 setMagnification: centeredAtPoint: 來設置網頁第一次展示的比例。以后,用戶可以使用手勢來改變這個展示比例。
符號
初始化一個網頁視圖
- configuration
拷貝一個configuration來初始化一個網頁使用。它是一個屬性的集合,這個集合用來初始化網頁。 - initWithFrame:configuration:
初始化一個網頁視圖,設置其大小和配置 - initWithCoder:
從解檔數據獲取一個初始化的對象。
檢查視圖信息
- scrollview
和網頁關聯的滾動視圖。 - title
當前頁的title。 - URL
當前請求網頁的URL(NSURL類型) - customUserAgent
用戶自定義代理字符串。如果沒有用戶自定義的代理字符串,它會被設置為nil。只在iOS9之后可用。 - serverTrust
當前委托對象的SecTrustRef對象。
設置代理
- navigationDelegate
網頁視圖導航代理 - UIDelegate
網頁視圖用戶界面代理
裝載內容(Loading content)
- estimatedProgress
當前navigation加載的進度,區間是0.0-1.0,加載進度包括主要的文檔和一些其他的子資源文件,當資源加載完成之后,會一直保持在1.0,直到有新的navigation開始,它才會被重置為0.0。WKWebView類的這個屬性符合KVO監聽。 - hasOnlySecureContent
要加載的網頁的所有資源是否都是通過安全編碼鏈接加載的。YES表示是,NO表示不是。也是用KVO監聽實現的。 - loadHTMLString:baseURL:
設置網頁的內容和基URL。返回一個新的導航。 - loading
判斷當前網頁是否在加載,getter的時候使用isLoading。 - reload
從新加載頁面內容。返回一個新的WKNavigation。 - reloadFromOrigin
重新加載頁面,如果可能,使用緩存驗證條件語句執行端到端的重新驗證。 - stopLoading
停止加載當前頁面所有的資源。 - loadData:MIMEType:characterEncodingName:baseURL:
設置網頁內容和基URL,iOS9之后可用。 - loadFileURL:allowingReadAccessToURL:
導航到文件系統上請求URL。如果readAccessURL引用單個文件,則只有該文件可能由WKWebView加載;如果readAccessURL引用一個目錄,那么該目錄的文件可能由WKWebView加載。
縮放內容(Scaling conetent)
- allowMagnification
一個bool值,用來標示webView是否支持放大手勢更改視圖的比例,默認值為NO。(不能再iPhone上使用,#if !TARGET_OS_IPHONE #endif包含着) - magnification
當前放大的比例,默認是1.0。(不能再iPhone上使用,#if !TARGET_OS_IPHONE #endif包含着) - setMagnification:centeredAtPoint:
按照指定的因子來縮放網頁內容並居中結果到指定的點。(不能再iPhone上使用,#if !TARGET_OS_IPHONE #endif包含着)
導航
- allowsBackForwardNavigationGestures
指示水平滑動手勢是否將觸發向前列表導航。YES表示是,默認為NO。設置為YES后,你就會發現,點擊鏈接到的某個頁面之后右划即可返回到上一個頁面,左划即可返回到鏈接的頁面,而且效果和push差不多。 - backForwardList
網頁視圖的后向列表。WKBackForwardList對象維護用於返回並轉發到最近的頁面的被訪問頁面的列表。WKBackForwardList對象僅維護列表數據,它不執行實際的頁面加載(換句話說,它不會產生任何客戶端請求)。 如果您需要執行頁面加載,請參閱WKWebView中的loadRequest:方法以了解如何執行此操作。具體可參見WKBackForwardList類。 - canGoBack
判斷網頁是否能夠返回,一個布爾值,表示在前向列表中是否有可以導航到的后面項目。 - canGoForward
一個布爾值,表示在可以導航到的前向列表中是否有前向項目。 - allowsLinkPreview
是否支持預覽。 在iOS中,此屬性適用於支持3D Touch的設備。 iOS中的默認值為NO。
如果將此屬性的值設置為YES,iOS用戶可以按鏈接以預覽鏈接目標和檢測到的數據,例如地址和電話號碼。這樣的預覽對於用戶來說是已知的。如果用戶在鏈接預覽上更深入地按下,則預覽導航(或在用戶術語中彈出)到目的地。由於pop導航將用戶從您的應用程序切換到Safari,因此它選擇啟用iOS應用程序。
如果你想在iOS中支持鏈接預覽,但也想讓用戶在你的應用程序中,你可以從使用WKWebView類切換到SFSafariViewController類。如果你將網絡視圖用作應用內瀏覽器,則進行此更改是最佳做法。 Safari視圖控制器類自動支持鏈接預覽。
在macOS中,此屬性在具有Force Touch觸控板的設備上可用。 macOS中的默認值為YES。
將此屬性設置為其默認值YES時,macOS用戶可以強制單擊鏈接以顯示顯示鏈接目標的預覽窗口。如果用戶點擊預覽,目標將在Safari中打開。
在這兩個平台上,當此屬性設置為YES時,所有類型的檢測到的數據都會響應按下。也就是說,在iOS 9和OS X v10.11中,你不能指定在WKWebView類中檢測到哪些類型的數據。 - goBack
導航到后退列表的后一項。 - goForward
導航到前進列表的中的前進項目。 - goToBackForwarListItem:
導航到來自前向列表的項目,並將其設置為當前項目。 - loadRequest:
導航到將要請求的URL。
執行javaScript
- evaluateJavaScript:completionHandler:
評估javaScript字符串。該方法將腳本評估的結果(或錯誤)發送到完成處理程序。 完成處理程序總是在主線程上(Main thread)運行。
實例化方法
- goBack:
- goForward:
- reload:
- reloadFromOrigin:
- stopLoading:
上面幾個方法都是WKIBActions分類的方法。具體可以參見官方API,和上面的說的方法類似
三個協議
- WKNavigationDelegate: 提供了追蹤主窗口網頁加載過程和判斷主窗口和子窗口是否進行頁面加載新頁面的相關方法。
- WKScriptMessageHandler: 提供從網頁中收消息的回調方法。
- WKUIDelegate: 提供用原生控件顯示網頁的方法回調。
總結
以后在開發的過程中,我們應該使用WKWebView,盡量不要去使用UIWebView,在我看來,WKWebView至少解決了兩大難題:
- 加載進度
- 內存泄露
- 支持手動設置alert展示
對它的理解也僅僅是皮毛,在以后的開發過程中進一步了解學習吧。