我正在编写一个浏览器扩展/加载项,遍历网页的完整html树。本质上,我使用node.childNodes获取每个节点的子节点,然后递归调用遍历函数。这很有效,直到我遇到iframe。即使iFrame具有内容,node.childNodes也始终将iframe显示为具有0个子节点。
我已经看到了如何处理此问题的示例(例如http://pietschsoft.com/post/2004/08/12/JavaScript-How-to-get-value-from-nested-form-in-iframe.aspx),但这些示例假设我知道iframe的名称或ID。但是,iframe可能没有名称或ID,只有src。
答案 0 :(得分:2)
您可以通过检查是否node.tagName == "IFRAME"
确定节点是否为iframe。
如果是,那么您可以查看node.childNodes
,而不是查找node.contentDocument.documentElement
。
应该相当简单。
答案 1 :(得分:0)
如果要遍历iFrame中的所有元素,则需要访问iFrame的document
对象。 伪代码:
if(currentElement == iframe) {
TraverseDOM(currentElement.contentDocument.documentElement);
}
注意:如果iFrame的内容来自不同的域,您将无法访问其内容。请参阅Same Origin Policy。