shadow Dom(shadowRoot) 访问


示例

gtx.shadowRoot.getElementById("translation")

gtx为host对象

 

起因

 

抓去chorome谷歌翻译插架的内容。有信息的内容div id是"bubble-content"

var contend=document.getElementById("bubble-content")

contend是null ? ! !怎么会是null?我又没拼错。

这不科学,然后发现这个div 外层有个#shadow-root (open)

没见过的东西

事不为常便有妖,问题8成就在这里

 

查了相关资料后确定

 

简而言之shadow-root 包裹下的对象,不在全局的dom树中,因此getElementById 等方法,获取不到包裹中的对象。

该功能的目的就是,独立出一块渲染块,不受外层样式的影响,内层的样式也不影响外层的显示。

 

访问方式为

1得到shadow-root 外层的根node 这个node是在全局dom树中的。

var gtx=document.getElementById("gtx-host")

2取得gtx的shadow块

gtx.shadowRoot

3之后再怎么操作就随意了

比如取shadow块中的节点。

var truecontent=gtx.shadowRoot.getElementById("translation");

 

后来想想,其实以前隐约在哪见到过这功能,但因为一真没有用,淡忘了


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM