暗影DOM不清楚

时间:2015-06-03 14:44:38

标签: javascript jquery html google-chrome

我需要访问具有Shadow DOM的打开窗口的body元素。在浏览器上运行此代码(您需要在浏览器上禁用第三方安全性):

<script type="text/javascript">
janela = window.open("http://www.google.com.br");

window.setTimeout(

    function() {

        console.log(janela.window.document.body.innerHTML);

    },
    5000

);
</script>

如果你在控制台看到会有一个空字符串。现在将网址http://www.google.com.br更改为http://www.bing.com.br,它运行正常:BODY innerHTML显示在控制台中。

我看到谷歌现在正在使用Shadow DOM,这可能是造成我问题的原因。在浏览器中打开Goog​​le.com - &gt; F12,你会看到有一个#shadow-root元素,我认为这会产生我的问题。我该如何绕过它并有权访问DOM?

2 个答案:

答案 0 :(得分:3)

Shadow DOM与此无关。您的浏览器不希望让任何随机网站打开像gmail.com这样的内容并阅读他们在那里看到的内容。如果确实如此,那么您访问的任何网站都可以在您登录Gmail帐户时阅读所有电子邮件。

请阅读“跨源脚本API访问”here部分。

  

JavaScript API,例如iframe.contentWindow,window.parent, window.open 和window.opener允许文档直接相互引用。当两个文档的原点不同时,这些引用提供了对Window和Location对象的非常有限的访问,如下两节所述。

答案 1 :(得分:1)

shadow DOM的整个想法是封装,所以你不能在创建它的上下文之外使用JavaScript访问shadow DOM。