【发布时间】:2018-04-21 17:55:31
【问题描述】:
我读过的所有内容都表明,Shadow Dom 从其父页面 CSS 来看应该是“安全的”。 IE。如果我将所有 div 样式设置为紫色字体:
<style>
div{color: purple}
</style>
我的 Shadow Dom 中的 div 应该具有浏览器默认颜色。
我正在编写一个将 html 注入任何给定页面的 chrome 扩展。除非此 html 受 Shadow Dom 或 Iframe 保护,否则它将继承页面的所有 CSS。
在question 中解决此问题的建议是使用 Shadow Dom。所以我实现了一个解决方案,但注意到它仍然继承了页面的 CSS。我认为这可能是在 Chrome 扩展程序中使用它时出现的问题,所以我从一些 Shadow Dom 示例中劫持了一个 jsBin(并将其扔到另一个实时编码应用程序中以更好地衡量)。
https://codepen.io/hyrumwhite/pen/xPRexQ
同样的结果。我的 shadow DOM 继承了页面 CSS,我的 div(奇怪的是我的 h1)是紫色的。
看起来 Shadow Dom 中的子元素将继承应用于宿主元素的任何样式。
这是否按设计工作?有没有办法防止这种情况?或者影子 DOM 是否足够新以至于这是一个错误,我应该期待在我继续使用它时会出现类似的错误?
【问题讨论】:
-
继承和选择器是有区别的。如果我没记错的话,阴影边界只会影响选择器的可见性,但所有会被继承的都是。 polymer-project.org/2.0/docs/devguide/…css-tricks.com/playing-shadow-dom
-
@JoshLee 有道理。在这种情况下,听起来好像使用 Shadow DOM 并不是最好的主意。
标签: javascript google-chrome google-chrome-extension shadow-dom