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