【问题标题】:Getting a reference to the parent IFRAME获取对父 IFRAME 的引用
【发布时间】:2011-04-05 06:26:21
【问题描述】:

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

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

谢谢

【问题讨论】:

  • “对文档对象的引用”是什么意思?哪个是容器 IFRAME?请澄清并可能显示一些代码
  • 我引用了一个 HTMLDocument 脚本对象(在 Firefox 脚本环境中),但没有引用它的容器 IFrame。

标签: javascript css dom iframe


【解决方案1】:

一个文档没有直接连接到它的父文档。您确实需要引用window 才能获取parent

DOM Level 2 Views 属性document.defaultView 将在大多数现代网络浏览器中为您提供window,但在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) {}
    }
}

try... 是为了避免由于另一个 iframe 位于不同的域中而导致文档访问失败时导致循环崩溃,从而导致同源策略错误。)

【讨论】:

    【解决方案2】:

    我用这个:

    function get_container_iframe()
             {var rtn_iframe=null;
              var iframes=window.parent.document.getElementsByTagName('iframe');
              for (var i=0; i<iframes.length; ++i)
                  {try
                       {var d=iframes[i].contentDocument || iframes[i].contentWindow.document || iframes[i].document; //ie | firefox etc | ie5
                        if (d===window.document)
                           {rtn_iframe=iframes[i];
                            break;
                           }
                       }
                   catch(e) {}
                  }
              return rtn_iframe;
             }
    

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2018-05-08
      • 2013-04-07
      • 2011-04-13
      • 1970-01-01
      • 2011-12-25
      相关资源
      最近更新 更多