【问题标题】:contentDocument for an iframeiframe 的 contentDocument
【发布时间】:2011-09-28 17:40:03
【问题描述】:

对于 iframe(甚至是旧的“frame”元素),“contentDocument”究竟代表什么?它等同于“html”元素还是“body”元素? 它有什么用? 所有浏览器都支持此属性吗?

【问题讨论】:

    标签: javascript html dom iframe frames


    【解决方案1】:

    w3.org

    Document 类型的 contentDocument,只读,在 DOM Level 2 中引入 此框架包含的文档,如果有并且可用,否则为 null。

    MDN

    从 DOM iframe 元素,脚本可以通过 contentWindow 属性访问包含的 HTML 页面的窗口对象。 contentDocument 属性引用 iframe 内的文档元素(相当于 contentWindow.document),但 IE8 之前的 Internet Explorer 版本不支持。

    msdn

    此页面或框架包含的文档
    此属性是 Windows Internet Explorer 8 中的新属性

    所以要获取 body 元素的 innerHTML,您可以使用

    iframe.contentDocument.getElementsByTagName("body")[0]

    iframe.contentDocument.body

    在当今的浏览器中。

    【讨论】:

    • 对 contentWindow 的支持怎么样?它是什么时候开始的,是标准的吗?
    • 谢谢,但是 w3.org 页面没有匹配 contentWindow,只有 contentDocument。我想知道 cotentWindow 的标准如何
    【解决方案2】:

    contentDocument 是获取 iframe 或框架的 Document 对象的标准化方法。它与在 iframe 中运行的 JavaScript 将通过 document 访问的对象相同。

    正如其他答案中所述,IE 直到版本 8 才支持它,但确实支持通过 contentWindow 访问 iframe 的 Window 对象。因此,获取 iframe 的 <body> 元素的跨浏览器方法是:

    var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
    var iframeBody = iframeDoc.body;
    

    请注意,如果 iframe 不是来自与主文档相同的域,浏览器安全限制将阻止以这种或任何其他方式访问其文档对象。

    【讨论】:

      【解决方案3】:

      contentDocument 表示 iframe(DOM 对象)的文档。它不等同于html,因为文档有自己的属性,但是如果您键入:

      myFrame.contentDocument.body 
      

      你会得到身体本身。

      所有浏览器都支持,稍作修改:用于 Internet Explorer

      myFrame.contentWindow.document
      

      享受吧,妮莉

      【讨论】:

        猜你喜欢
        • 2014-04-06
        • 2013-04-29
        • 2015-04-10
        • 2023-03-26
        • 1970-01-01
        • 2016-04-12
        • 2020-12-15
        • 1970-01-01
        • 2015-04-04
        相关资源
        最近更新 更多