获取对父IFRAME的引用

Mel*_*var 6 javascript css iframe dom

假设我有一个文档对象的引用,它包含在IFRAME中.如何获得容器IFRAME的引用?.parentNode和.ownerDocument都返回null.

请注意,没有可用的上下文信息(例如'window.xxx'之类的解决方案不起作用) - 所有可用的都是对文档对象的引用.

谢谢

bob*_*nce 12

文档未直接连接到其父文档.你需要一个参考window,以便拿起parent.

DOM Level 2 Views属性document.defaultView将为您window提供大多数现代Web浏览器,但在IE中您必须使用非标准浏览器document.parentWindow.(某些较旧或较为模糊的浏览器不会实现这些属性中的任何一个,在这种情况下,您会被卡住.)

这将给你window父文件的内容.如果你想获得<iframe>保存文档的内容,你必须遍历页面上的所有iframe并检查所包含的文档是否是你自己.

再一次,从iframe元素返回到子节点的方法在IE(iframe.contentWindow给你window)和DOM标准以及其他所有人(iframe.contentDocument给你document)中是无差别的.

所以,像:

function getFrameForDocument(document) {
    var w= document.defaultView || document.parentWindow;
    var frames= w.parent.document.getElementsByTagName('iframe');
    for (var i= frames.length; i-->0;) {
        var frame= frames[i];
        try {
            var d= frame.contentDocument || frame.contentWindow.document;
            if (d===document)
                return frame;
        } catch(e) {}
    }
}
Run Code Online (Sandbox Code Playgroud)

(这try...是为了避免因文档访问因另一个iframe位于不同域而导致文档访问失败而导致环路崩溃,从而导致同源策略错误.)