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