我一直在阅读有关<iframe>标签的HTML5添加内容.其中一个补充是包含沙盒标志,允许加载到其中的文档iframe与其父浏览器上下文进行交互.
在阅读了一些文档之后,我正在寻找一些清晰度.我已经阅读了MDN对allow-same-origin标志的描述:
允许将内容视为来自其正常来源.如果未使用此关键字,则嵌入的内容将被视为来自唯一来源.
在阅读W3C的规范后,我认为并不是很有帮助,有帮助:
... [我可以用来嵌入来自第三方网站的内容,沙盒以防止该网站打开弹出窗口等,而不会阻止嵌入式页面与其原始网站通信,使用数据库用于存储数据等的API
根据W3C的规范,我的问题具体是关于MDN所指的"正常起源":当提到"正常起源"时,MDN声明<iframe>标签中包含的文件内容被视为共享来源.文档来源的页面,例如YouTube视频相信 - 并且可以进行通信 - 它仍然是YouTube的一部分?或者,<iframe>文档是否可以访问父浏览器上下文?
(对于某些人来说,这个问题可能等于“如果我不能sharedArrayBuffer在我的主站点中使用,我可以打开一个 iframe 并sharedArrayBuffer在 iframe 内部使用吗?”)
所以我想在我的站点中使用一些带有sharedArrayBuffer的wasm,但是使站点跨域隔离是不切实际的,所以我创建了另一个站点https://my-wasm-function.app,它是跨域隔离的。我希望将它用作 iframe,并通过 与我的主站点进行通信postMessage。
然而,我发现一旦它作为 iframe 嵌入,它就失去了隔离状态。
2021 年 3 月曾有人提出过类似的问题,当时接受的答案是“否”。然而,最近的一篇谷歌博客文章似乎暗示不然,所以我想再问一遍。
该博文有一些关于如何隔离 iframe 的模糊说明,其中之一是添加标题Cross-Origin-Resource-Policy: cross-origin(我认为在COOP和 的顶部COEP),我尝试过,但没有成功。还有一个就是这样打开iframe:<iframe allow="cross-origin-isolated">,我也尝试了,也没用。
webassembly sharedarraybuffer cross-origin-embedder-policy cross-origin-opener-policy cross-origin-resource-policy
cross-origin-embedder-policy ×1
cross-origin-resource-policy ×1
html ×1
html5 ×1
iframe ×1
webassembly ×1