# Shadow DOM
从零到英雄学习AWS黑客技术,通过 htARTE (HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
* 如果你想在 **HackTricks中看到你的公司广告** 或 **下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方的PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现 [**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在 **Twitter** 🐦 上 **关注** 我 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享你的黑客技巧。
## 基本信息
Shadow DOM是[Web组件](https://developer.mozilla.org/en-US/docs/Web/Web\_Components)功能套件的一部分,旨在允许JS开发者创建具有封装功能的可复用自定义元素,与网站代码的其余部分隔离。
本质上,你可以使用Shadow DOM来**隔离你的组件的HTML和CSS,使其与网页的其余部分隔离**。例如,如果你在shadow DOM中创建元素ID,它们**不会与父DOM中的元素ID冲突**。你在shadow DOM中使用的任何CSS选择器只会应用于shadow DOM内部,而不会影响到父DOM,你在父DOM中使用的任何选择器也不会渗透到shadow DOM内部。
```js
// creating a shadow DOM
let $element = document.createElement("div");
$shadowDomRef = $element.attachShadow({ mode: "open" }); // open or closed
```
通常,当你将一个**"open" 影子 DOM 附加到一个元素上**时,你可以通过 **`$element.shadowRoot`** 获取到影子 DOM 的引用。然而,如果影子 DOM 是以**"closed"** 模式附加的,你**无法**通过这种方式获得它的引用。即使我阅读了我能找到的所有开发者文档,我对 closed 模式的目的仍然有些不清楚。[根据 Google 的说法](https://developers.google.com/web/fundamentals/web-components/shadowdom):
> 影子 DOM 还有另一种叫做 "closed" 模式的形式。当你创建一个**closed** 影子树时,**外部的 JavaScript 将无法访问你组件的内部 DOM**。这和像 `