示例

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");

 

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

相关文章:

  • 2021-06-07
  • 2021-07-27
  • 2021-12-31
  • 2022-02-04
  • 2022-12-23
  • 2021-12-18
  • 2021-05-26
  • 2022-12-23
猜你喜欢
  • 2021-10-16
  • 2022-12-23
  • 2021-10-05
  • 2021-04-19
  • 2021-07-14
  • 2021-09-21
相关资源
相似解决方案