iOS 11.3 的 WKWebView 中的 Service Worker 不可用

Posted

技术标签:

【中文标题】iOS 11.3 的 WKWebView 中的 Service Worker 不可用【英文标题】:Service Workers unavailable in WKWebView in iOS 11.3 【发布时间】:2018-04-05 13:18:33 【问题描述】:

Service Worker 在 ios 11.3 测试版中的 WKWebView 中可用,但在 iOS 11.3 的最终 GM 版本中似乎不可用。

有谁知道如何在 iOS 上的 WKWebView 中重新启用 Service Worker?

【问题讨论】:

【参考方案1】:

WKWebView 中的 Service Worker 现在需要权利:

com.apple.developer.WebKit.ServiceWorkers,应将其作为 Boolean 添加到 .entitlements plist,其值为 YES

目前这仅适用于 iOS 模拟器,直到 Apple 更新 Apple Developer Portal 以使创建包含此权利的 App ID 和 Provisioning Profiles 成为可能。

有关详细信息,请参阅此错误:https://bugs.webkit.org/show_bug.cgi?id=182865 和相关更改集:https://trac.webkit.org/changeset/228933/webkit

编辑:不幸的是,iOS 14 中似乎仍然如此。

【讨论】:

同意。我将在 WWDC 上拜访 WebKit 实验室。 让我知道它是怎么回事:-) WWDC 之后的确认:所需的权利不适用于开发者门户中的 App ID。 @AndrewEbling Apple - 坦率地说这很荒谬,所以 iOS Safari 支持它,但是因为我们不能将 WKWebView 应用程序标记为 Service Worker,所以我们不能在我们想要的基于 Cordova 的应用程序中使用它们使用 SW 离线功能而不是通过一些 hacky localhost 服务器来实现它 - 我在哪里可以添加对要添加的此功能请求的支持? Apple 在 iOS 应用程序中对 html5 的处理是积极疏忽的。他们一直在删除和/或破坏我们需要的东西(loadFileURL(... :allowingReadAccessTo) 刚刚在 iOS 13 中破坏)。【参考方案2】:

iOS 14 (com.apple.developer.web-browser) 现在提供此权利。由于 Apple 现在允许其他浏览器作为默认选项,因此有一个新的可用权利,其中还包括服务工作者!!!

可在此处找到更新的文档: Apple Docs

以下是有趣的部分:

使用默认浏览器功能

- 使用 com.apple.developer.web-browser 托管授权的应用可以:

- 供用户选择作为他们的默认浏览器。

- 从具有完整脚本访问权限的所有域加载页面。

- 在 WKWebView 实例中使用 Service Worker

但这有很大的缺点。 通用链接将不再起作用,并且 info.plist 有一个不允许的密钥列表(请参阅链接)。

任何人都可以在应用商店中使用此权利确认拥有 WKWebview 吗?


更新:

更好的解决方案可能是使用App Bound Domains

这适用于最多 10 个域,并且您将 WKWebview 限制为这些域!它不适用于其他网站。您不必拥有该域。

将以下内容添加到您的 WKWebviewConfiguration:

let configuration = WKWebViewConfiguration()
configuration.limitsNavigationsToAppBoundDomains = true

在您的信息列表中添加带有 WKAppBoundDomains 的键:

<key>WKAppBoundDomains</key>
<array>
  <string>example.com</string>
  <string>example2.com</string>
</array>

在快速测试后返回'serviceWorker' in navigator === true。 如果这通过了审查过程,这可能是PWA 的一个突破!!!!

【讨论】:

你是在真机还是模拟器上运行的?您是否在 .plist 文件中设置了权利,或者您是否能够将其添加到您的 app-id / 配置文件中?

以上是关于iOS 11.3 的 WKWebView 中的 Service Worker 不可用的主要内容,如果未能解决你的问题,请参考以下文章

解决 WKWebView http POST 在 iOS 11.3 中不再发送参数的问题

如何在 wkwebview 中下载文件

HTML 输入自动完成在 WKWebview 中不起作用

为啥我在 iOS 9 上的 WKWebView 中的音频流无法播放?

IOS - 来自本地HTML文件的WKWebView中的CORS

WKWebView 不再与 iOS10 中的 Javascript 交互