我需要访问具有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,这可能是造成我问题的原因。在浏览器中打开Google.com - &gt; F12,你会看到有一个#shadow-root元素,我认为这会产生我的问题。我该如何绕过它并有权访问DOM?
答案 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。