在 Apple 的 WWDC 2018 大會上宣布 iOS 12 beta SDK 的同時,也傳出消息,最初與 iOS SDK 捆綁在一起的網頁視圖 UIWebView 已被棄用。這對 iOS 開發人員來說意味著,未來某個時候,Apple 將從其 SDK 中移除 UIWebView,開發人員現在就應該開始遷移到使用 WKWebView 元件。
WebView 引擎外掛程式
Cordova iOS 從第 4 版開始,就已預見到這一點,將平台使用的網頁視圖移至外掛程式中。預設使用的網頁視圖仍然是 UIWebView,但您可以選擇使用 WKWebView,搭配cordova-plugin-wkwebview-engine外掛程式。UIWebView 和 WKWebView 網頁視圖本身都是外掛程式,前者包含在 cordova-ios 平台中。
未來 Cordova iOS 將使用 WKWebView
從未來版本的 Cordova iOS 開始,我們將在 cordova-ios 平台中同時提供這兩種網頁視圖外掛程式,讓開發人員能夠測試並將使用者轉移到新的 WKWebView 元件。未來版本的 Cordova iOS 將提供一個橋接網頁視圖外掛程式,可以在執行時切換使用的網頁視圖外掛程式。先前,您只能在建置時選擇要使用的網頁視圖。
使用橋接網頁視圖外掛程式進行遷移和轉換
開發人員可以設定偏好設定來切換使用的網頁視圖,此設定會在應用程式啟動時讀取。開發人員可以透過使用者在應用程式設定中的選擇,或是可能隨機以 A/B 測試的方式,將使用者轉換到新的 WKWebView。這樣開發人員和其使用者就有機會試用新的元件,如果發生任何問題,他們可以退出並使用 UIWebView,而無需發布新的應用程式版本。這僅適用於測試和遷移目的,開發人員應致力於僅支援 WKWebView 的功能。
Cordova iOS 未來版本,僅使用 WKWebView
在未來的 iOS SDK 中移除 UIWebView 支援後,我們將致力於發布未來版本的 Cordova iOS,將移除 UIWebView 支援,而 WKWebView 將成為預設的網頁視圖引擎。
Cordova iOS 4 »> | 未來 Cordova iOS »> | 「更遙遠未來」的 Cordova iOS |
---|---|---|
UIWebView 已棄用 | UIWebView 已移除 | |
WKWebView 引擎外掛程式已整合到平台中 | 僅使用 WKWebView 引擎外掛程式 | |
已新增橋接網頁視圖外掛程式 | 已移除橋接網頁視圖外掛程式 |
WKWebView 的限制
WKWebView 有許多限制,特別是如果您先前使用 UIWebView。限制如下:
- Cookie 不會持續存在。這是一個 WebKit 錯誤,但有人建立了一個外掛程式來解決此問題。請參閱 CB-12074
- 無法刪除 Cookie。這是/曾經是 WebKit 的錯誤 (2015 年),我們需要測試 iOS 11/12。請參閱 CB-11297
- 無法在背景中執行 JavaScript 程式碼。這方面有幾個問題。請參閱 CB-12815
- 由於跨來源資源分享問題 (CORS),XmlHttpRequests 無法運作。Oracle 建立了一個可用的外掛程式 (UPL 授權,與 Apache-2.0 相容)。請參閱 CB-10143
- 從 UIWebView 遷移 localStorage。有一個可用的遷移外掛程式。請參閱 CB-11974
- iframe 將不再支援 (它們現在在 WKWebView 中受 CORS 限制),並且可能會部分或完全損壞。這可能會導致與其他 Cordova 平台上的相同程式碼不相容。
- 在 iOS 11 之前的版本中,WKWebView 的已知問題將在未來版本的 Cordova 中被棄用和移除
還有一些錯誤需要解決。完整列表在此: https://s.apache.org/QfsF
如您所見,WKWebView 並不能直接取代 UIWebView,您需要幾個外掛程式來修補遺失的功能。還有本機網頁伺服器實驗性外掛程式選項,但不會升級為完整的外掛程式,我們將集中精力支援主要的 WKWebView 引擎外掛程式。
希望透過更多的測試,以及向 Apple 回報遺失功能的錯誤,WKWebView 可以成為 Cordova 使用者的完整替代方案。
2019-02-16 更新:此部落格文章已更新,以移除關於這些變更將包含在 Cordova iOS 5 中的參考,因為 Cordova iOS 5 已發布,但未包含這些變更,且計畫的實作已移至未來版本的 Cordova iOS。