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");
后来想想,其实以前隐约在哪见到过这功能,但因为一真没有用,淡忘了