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 中不再发送参数的问题
为啥我在 iOS 9 上的 WKWebView 中的音频流无法播放?