普通页面能否嵌入跨源隔离iframe以使用SharedArrayBuffer?
解决方案
该需求目前在现代浏览器中可实现,2021年的旧答复不适用于当前浏览器版本,你之前配置未生效是遗漏了部分必要配置项,完整要求如下:
1. 内嵌iframe站点的响应头配置
你部署的wasm专用站点所有响应都需要添加以下头信息:
- 必须配置
Cross-Origin-Opener-Policy: same-origin - 必须配置
Cross-Origin-Embedder-Policy: require-corp,如果该站点需要加载未配置Cross-Origin-Resource-Policy头的跨源资源,可替换为Cross-Origin-Embedder-Policy: credentialless - 该站点的所有响应(包括HTML入口、静态资源、接口响应)都必须添加
Cross-Origin-Resource-Policy: cross-origin头
2. 主站的响应头配置
主站无需开启全局跨源隔离,也不需要配置COOP头,仅需为所有文档响应添加Cross-Origin-Embedder-Policy: require-corp或Cross-Origin-Embedder-Policy: credentialless即可。
3. iframe标签的属性配置
嵌入iframe时必须添加以下两个属性,缺一不可:
<iframe src="https://my-wasm-function.app" allow="cross-origin-isolated" crossorigin="anonymous" > </iframe>
效果验证
配置完成后,在iframe的上下文控制台执行self.crossOriginIsolated,返回true即代表跨源隔离生效,可正常使用SharedArrayBuffer相关能力,通过postMessage和主站通信不受影响。
兼容性说明
该方案支持的浏览器版本如下:
- Chrome/Edge 96及以上版本
- Firefox 115及以上版本
- Safari 15.2及以上版本
低于上述版本的浏览器不支持iframe独立跨源隔离能力。
内容的提问来源于stack exchange,提问作者ZYinMD
相关产品推荐
相关产品推荐

