尝试使用using document.getElementsByTagName on a page with iFrames - elements inside the iframe are not being picked up提供的有用代码,但两个示例似乎都查看了iframe的第一“级别”,而不是其他iframe中的iframe。
尝试:
const subtreeSet = (root, theset) => {
if (!theset) theset=new Set();
if (!root || theset.has(root)) return theset;
theset.add(root);
if (root.shadowRoot) {
Array.from(root.shadowRoot.children).forEach(child => subtreeSet(child, theset));
} else {
if (root.tagName === 'IFRAME') { try { root=root.contentDocument.body; theset.add(root); } catch (err) { root=null; /* CORS */ } }
if (root && root.getElementsByTagName) for (const child of root.getElementsByTagName('a')) subtreeSet(child, theset);
}
return theset;
}
console.log(subtreeSet(document));
我希望看到所有链接,但只看到了不在嵌套iframe中的链接。
1条答案
按热度按时间bpsygsoo1#
HTML中的iframe是一个有点特殊的标签。要访问此标签,您有2个选项
contentWindow
或contentDocument
。您可以在此链接Stack OverFlow question中获得信息。之后,你可以检查这个other link来了解如何合并这两个属性。代码应该是这样的:
记住,在你的代码中,你正在执行
root.contentDocument.body
,这个.body
是不正确的。