WorkerGlobalScope: crossOriginIsolated 属性
注意:此功能仅在 Web Workers 中可用。
crossOriginIsolated 是 接口的一个只读属性,它返回一个布尔值,指示文档是否是跨源隔离的。WorkerGlobalScope
跨源隔离的文档仅与其在弹出窗口和导航中的同源文档共享其浏览上下文组,以及通过CORS(以及 <iframe> 的COEP)选择加入使用的资源(同源和跨源)。与该文档的跨源打开者或其打开的任何跨源弹出窗口的关系将被切断。该文档还可以与它可以操作共享内存进行通信的其他文档一起托管在单独的操作系统进程中。这减轻了称为XS-Leaks 的侧信道攻击和跨源攻击的风险。
跨源隔离的文档在使用以下 API 时受到的限制较少
SharedArrayBuffer可以通过DedicatedWorkerGlobalScope.postMessage()或MessagePort.postMessage()调用创建和发送。Performance.now()提供更高的精度。Performance.measureUserAgentSpecificMemory()可以被调用。
如果文档是通过包含以下标头的 HTTP 响应返回的,则该文档将被跨源隔离:
- 带有
same-origin指令的Cross-Origin-Opener-Policy标头。 - 带有
require-corp或credentialless指令的Cross-Origin-Embedder-Policy标头。
对 API 的访问还必须由 Permissions-Policy cross-origin-isolated 允许。否则,crossOriginIsolated 属性将返回 false,并且文档将无法使用上面列出的限制较少的 API。
值
一个布尔值。
示例
跨源隔离文档
要跨源隔离文档,请执行以下操作:
-
将
Cross-Origin-Opener-PolicyHTTP 标头设置为same-originhttpCross-Origin-Opener-Policy: same-origin -
将
Cross-Origin-Embedder-PolicyHTTP 标头设置为require-corp或credentiallesshttpCross-Origin-Embedder-Policy: require-corp Cross-Origin-Embedder-Policy: credentialless -
Permissions-PolicyPermissions-Policy标头的cross-origin-isolated指令不得阻止对该功能的访问。请注意,该指令的默认允许列表是self,因此默认情况下会授予跨源隔离文档的权限。
检查文档是否是跨源隔离的
js
const myWorker = new Worker("worker.js");
if (self.crossOriginIsolated) {
const buffer = new SharedArrayBuffer(16);
myWorker.postMessage(buffer);
} else {
const buffer = new ArrayBuffer(16);
myWorker.postMessage(buffer);
}
规范
| 规范 |
|---|
| HTML # dom-crossoriginisolated-dev |
浏览器兼容性
加载中…