解决方法
TL; DR:
暗影DOM:
Shadow DOM works by hiding the scoped DOM trees from the traditional
@H_301_15@
tree walking functions and accessors (childNodes,children,firstChild
and so on). These accessors return only the elements in your scope.这意味着它隐藏了一层复杂性.我在网上找到的一个例子是< video>< / video>标签.它解释了视频控件是如何在其中进行的,但是那些被抽象掉了,你无法看到它们.这就是Shadow DOM的功能,但适用于所有Web组件.
Shadow DOM听起来不错,但也有局限性
>这是很多代码.
>间接所有DOM API都很慢.
>像NodeList这样的结构根本无法模拟.
>某些访问者无法覆盖(例如,
window.document,window.document.body).
> polyfill返回实际不是节点的对象,但返回Node
代理,这可能非常令人困惑.这就是shady DOM的用武之地.
Shady DOM:
Shady DOM is a super-fast shim for shadow DOM that provides
@H_301_15@
tree-scoping,but has drawbacks. Most importantly,one must use the
shady DOM APIs to work with scoped trees.通过使用Shady DOM,您现在没有组件的抽象视图.你可以看到一切.但是使用Shady DOM,您可以通过运行以下方法来检查如果使用Shadow DOM,树的外观如何:
var arrayOfNodes = Polymer.dom(YOUR_SELECTOR_GOES_HERE).children;因此,将所有这些信息考虑在不同DOM的工作方式上,似乎纸张步进器Web组件需要访问整个树才能正常工作.由于Shadow DOM抽象了内部元素,因此必须使用Shady DOM或重构代码,使得不需要从抽象外部访问内部元素.