我所阅读的所有信息都表明,Shadow DOM应该是受其父页面CSS保护的。也就是说,如果我将所有div样式设置成紫色字体:
<style>
div{color: purple}
</style>
我的Shadow DOM中的div应该具有浏览器默认颜色。
我正在编写一个Chrome扩展程序,将HTML注入到任何给定的页面中。除非这个HTML受到Shadow Dom或Iframe的保护,否则它将继承页面的所有CSS。
在这个问题中解决这个问题的建议是使用Shadow Dom。因此,我实施了一种解决方案,但注意到它仍然继承了页面的CSS。我认为这可能是在Chrome扩展程序中使用它时出现的问题,所以我从一些Shadow Dom示例中劫持了一个jsBin(并将其放入另一个实时编码应用程序中以确保)。
https://codepen.io/hyrumwhite/pen/xPRexQ
结果相同。我的shadow DOM继承了页面CSS,并且我的div(和奇怪的h1)是紫色的。
看起来Shadow Dom中的子元素会继承应用于宿主元素的任何样式。
这是设计上的工作方式吗?有没有办法阻止这种情况?还是说Shadow DOM足够新,这是一个错误,我应该期望在继续使用它时出现类似的错误?