因此,SharedArrayBuffer 最近被限制为跨源隔离页面作为安全修复。
我们有一个依赖于 SharedArrayBuffer 的工具,我对其进行了重新设计,将其移动到一个剥离了所有其他站点 UI 和其他内容的准系统页面,并发送以下标头:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Run Code Online (Sandbox Code Playgroud)
尝试将其加载到成熟网站的 iframe 中会出现控制台错误,SharedArrayBuffer will require cross-origin isolation as of M92
然后是ReferenceError: SharedArrayBuffer is not defined
- 与我在跨源隔离最小页面本身上的工具之前遇到的情况相同。
我尝试包含 iframe 的页面不是跨域隔离的。这样做即使不是不可能,也是非常困难的。我根本不需要从父页面与 iframe 进行交互,这只是一个方便/风格的事情。目前的生产解决方案只是将用户链接到新窗口中的最小跨源工具页面,但这非常尴尬。
我希望有一些 iframe沙箱属性的组合或者可以使这项工作正常进行的东西?我为此奋斗了几个小时。
据我所知,这可能是不可能的。
所以我读到 Chrome 即将发生变化,以启用 SharedArrayBuffer 的使用,特别是“使您的网站“跨域隔离””。我的站点使用不符合此要求的外部 API。所以我所做的是,使用子域将使用 SharedArrayBuffer 的代码卸载到 iframe 中,并将所需的标头添加到该页面。现在阅读更多内容,似乎我仍然需要为顶级文档提供所需的标题,否则我仍然会在控制台中收到警告。
澄清一下,我的网站现在使用以下结构:
app.website.com
-> 包含完整的应用程序功能service.website.com
-> 包含使用 SharedArrayBuffer 的功能我以为我可以简单地添加所需的标题service.website.com
,一切都会正常工作,但我仍然收到跨源警告。有任何想法吗?