在苹果公司 2018 年 WWDC 大会上宣布 iOS 12 测试版 SDK 的同时,也带来了 UIWebView(最初与第一个 iOS SDK 捆绑在一起的 webview)已被弃用的消息。这对 iOS 开发人员意味着,在未来的某个时候,苹果将从其 SDK 中删除 UIWebView,开发人员应立即开始迁移到使用 WKWebView 组件。
WebView 引擎插件
Cordova iOS 从 4.0 版本开始,已经预料到这一点,将平台使用的 webview 移到了插件中。默认使用的 webview 仍然是 UIWebView,但是您可以选择使用 WKWebView,通过 cordova-plugin-wkwebview-engine 插件。UIWebView 和 WKWebView 本身都是插件,前者包含在 cordova-ios 平台中。
未来使用 WKWebView 的 Cordova iOS
从未来的 Cordova iOS 版本开始,我们将把两个 webview 插件都包含在 cordova-ios 平台中,以便开发人员测试并引导用户过渡到新的 WKWebView 组件。这个未来的 Cordova iOS 版本将附带一个桥接 webview 插件,该插件可以在运行时切换所使用的 webview 插件。以前,您只能在构建时选择要使用哪个 webview。
使用桥接 WebView 插件进行迁移和过渡
开发人员可以通过设置一个偏好设置来切换使用的 webview,该偏好设置将在应用程序启动时读取。开发人员可以通过用户选择(在他们的应用程序设置中)或随机地(也许作为 A/B 测试)来引导用户过渡到新的 WKWebView。这将使开发人员及其用户有机会试用新组件,并且如果出现任何问题,他们可以回退并使用 UIWebView,而无需发布新的应用程序。这仅用于测试和迁移目的——开发人员应致力于仅支持 WKWebView 的功能。
Cordova iOS 未来版本,仅限 WKWebView
当 UIWebView 支持在未来的 iOS SDK 中被移除时,我们将发布一个未来的 Cordova iOS 版本,其中将移除 UIWebView 支持,而 WKWebView 将成为默认的 webview 引擎。
Cordova iOS 4 »> | 未来的 Cordova iOS »> | “更遥远的未来” Cordova iOS |
---|---|---|
UIWebView 已弃用 | UIWebView 已移除 | |
WKWebView 引擎插件集成到平台中 | 仅限 WKWebView 引擎插件 | |
添加桥接 WebView 插件 | 移除桥接 WebView 插件 |
WKWebView 的限制
WKWebView 存在许多限制,特别是如果您之前使用的是 UIWebView。 这些限制包括:
- Cookie 不会持久存在。这是一个 WebKit 错误,但有人创建了一个插件来解决这个问题。请参阅CB-12074
- 无法删除 Cookie。这是一个/曾经是 WebKit 的错误(2015 年),我们需要测试 iOS 11/12。请参阅CB-11297
- 无法在后台执行 JavaScript 代码。与此相关的问题有几个。请参阅CB-12815
- XmlHttpRequests 因为跨域资源共享问题 (CORS) 而无法工作。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 的直接替代品,您将需要几个插件来修补缺少的功能。还有本地 Web 服务器实验性插件选项,该选项不会升级为完整插件——我们将集中精力支持主要的 WKWebView 引擎插件。
希望通过更多的测试,并向 Apple 提交关于缺少功能的错误报告,WKWebView 可以完全替代 Cordova 用户。
更新于 2019-02-16:此博客文章已更新,删除了有关这些更改将包含在 Cordova iOS 5 中的引用,因为Cordova iOS 5 已发布,其中不包含这些更改,并且计划的实施已移至未来的 Cordova iOS 版本。