在iOS上的Capacitor App中运行ServiceWorker

ggazkfy8  于 2023-06-07  发布在  iOS
关注(0)|答案(1)|浏览(425)

tl;dr

本质上,我需要设置COOP/COEP头文件,以便在我的Capacitor v3 iOS应用程序中启用SharedArrayBuffer功能,并且运行ServiceWorker来设置头文件是迄今为止我找到的唯一解决方案。

问题背景

Chrome Android和Safari iOS now support SharedArrayBuffer(现在意味着Ffmpeg.wasm可以使用多线程)。SharedArrayBuffer需要一个安全上下文来启用功能,这可以通过设置以下头来完成:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

进一步要求;

  • 该网站需要通过HTTPS或localhost服务
  • 头必须在服务器端设置(不能在head标签中使用meta http-equiv=".."设置头)

我发现在电容器中实现这个问题。我的应用程序是自包含的(应用程序文件在本地提供),它不需要外部http请求来提供应用程序文件。这意味着不能在服务器端设置所需的头文件。

解决方案

下面的解决方案建议使用ServiceWorker在客户端设置COOP/COEP头,这正是我所需要的。Enabling COOP/COEP without touching the server

问题

ServiceWorkers有他们自己的一套需求,这就是我卡住的地方。
要在iOS上启用此ServiceWorker API,我使用App-Bound Domains
github Support deploying a PWA with capacitor as native app中的以下问题概述了在Capacitor中实现应用绑定域所需的步骤。
其中包括;

  • 添加您的域列表,包括。server.hostname / localhost到Info. plist。
  • 在src中启用limitsNavigationsToAppBoundDomains-capacitor/capacitor.config.json

设置应用绑定域后,我可以以下错误;

serviceWorker.register() must be called with a script URL whose protocol is either HTTP or HTTPS

这是因为Capacitor应用程序是从iOS中的capacitor://提供服务的。
有什么办法吗?(不需要从远程URL提供服务)。
或者有没有人发现了一个更好的方法来设置COOP/COEP头客户端在电容器?
谢谢你Cam

js81xvg6

js81xvg61#

我看到了很多关于电容器和服务工人的问题,人们正试图用它来升级应用程序。如果你的源代码是外部站点,并且你通过service worker加载代码,Service worker是很好的。如果你在capacitor中嵌入了文件,那么你就有一些离子插件来刷新代码(不记得名字了😊)。如果你想从外部网站发布代码,问题是苹果商店会禁止它。这种模式称为TWA。

相关问题