ShadowRoot: mode 属性

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流浏览器均已支持。

ShadowRootmode 只读属性指定了它的模式——openclosed。这定义了该 shadow root 的内部特性是否可以从 JavaScript 访问。

当 shadow root 的 mode"closed" 时,shadow root 的实现细节对于 JavaScript 是不可访问且不可更改的——这与例如 <video> 元素的实现细节对于 JavaScript 不可访问且不可更改的方式相同。

该属性值是使用传递给 Element.attachShadow() 方法的对象的 mode 属性设置的,或者在使用声明方式创建 shadow root 时,使用 <template> 元素的 shadowrootmode 属性设置的。

一个字符串值,可以取以下值之一:

open

shadow root 的元素可以从 root 外部的 JavaScript 访问。

closed

closed shadow tree 内部的节点无法从 root 外部的 JavaScript 访问。

示例

js
// We create a closed shadow root, that is not accessible
let element = document.createElement("div");
element.attachShadow({ mode: "closed" });
console.log(element.shadowRoot); // logs null as the shadow root is closed

// We create an open shadow root, that is accessible
let element2 = document.createElement("div");
element2.attachShadow({ mode: "open" });
console.log(`The shadow is ${element2.shadowRoot.mode}`); // logs "The shadow is open"
element2.shadowRoot.textContent = "Opened shadow"; // The shadow is open, we can access it from outside

规范

规范
DOM
# dom-shadowroot-mode

浏览器兼容性