【发布时间】:2018-04-05 13:18:33
【问题描述】:
Service Worker 在 iOS 11.3 测试版中的 WKWebView 中可用,但在 iOS 11.3 的最终 GM 版本中似乎不可用。
有谁知道如何在 iOS 上的 WKWebView 中重新启用 Service Worker?
【问题讨论】:
Service Worker 在 iOS 11.3 测试版中的 WKWebView 中可用,但在 iOS 11.3 的最终 GM 版本中似乎不可用。
有谁知道如何在 iOS 上的 WKWebView 中重新启用 Service Worker?
【问题讨论】:
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 中似乎仍然如此。
【讨论】:
loadFileURL(... :allowingReadAccessTo) 刚刚在 iOS 13 中破坏)。
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 的一个突破!!!!
【讨论】: