【问题标题】:Can't access iframe content in IE无法在 IE 中访问 iframe 内容
【发布时间】:2012-05-21 01:03:50
【问题描述】:

我正在构建一个 CMS 应用程序,我现在正在为 IE 调试它。但是发生了一些我无法理解的事情。

首先我有一个包含页面内容的 div。我提取 div 的内容并使用 javascript 创建一个 iFrame 并将其附加到 div。这是为了制作所见即所得的编辑器。然后,当我想将内容添加到 iFrame 时,问题就开始了。由于某种原因,IE 无法访问 iFrame 的正文。我可以提醒 iFrame 的文档,它给了我 [object Document] 或 [object HTMLDocument],但是当我提醒正文时,我得到了 null。

我使用这个函数来获取文档作为 javascript 对象的一部分:

iframedoc: function(aID) {
    if (document.getElementById(aID).contentDocument){
        return document.getElementById(aID).contentDocument;
    } else {
        var iFrame = document.getElementById(aID);
        return iFrame.contentWindow.document;
    }
},

这是我第一次这么称呼它:

tas[i].innerHTML = "";
tas[i].appendChild(ta_edit_functions);
tas[i].appendChild(ta_edit);
tas[i].appendChild(ta_result);
alert(ta.iframedoc(ta_edit_id));
ta.iframedoc(ta_edit_id).body.innerHTML = ta_edit_content;
ta.iframedoc(ta_edit_id).designMode = 'on';

这里我清空 div,添加一个包含所见即所得函数的 div、iFrame 和 textarea 以最终提交表单。

我正在 IE 8 和 9 中进行测试。最奇怪的是,当我在 IE 8 中第一次调用 iframedoc 之前发出警报时,我突然得到了正文。

如果有人至少能指出我正确的方向,我将不胜感激。我真的不知道发生了什么。

【问题讨论】:

    标签: javascript internet-explorer iframe


    【解决方案1】:

    我正在 IE 8 和 9 中进行测试。最奇怪的是,当我在 IE 8 中第一次调用 iframedoc 之前发出警报时,我突然得到了正文。

    这听起来好像你的浏览器速度太快了——当你试图弄乱它时,iframe 可能还没有完全加载,所以添加一个警报会给它额外的时间。尝试在 iframe 元素上使用 onload 事件来延迟您的一些代码。

    【讨论】:

    • 看来肯定是这样!将代码添加到 iFrame 的 onload 事件表明,首先添加 iFrame(使用循环设置所有具有相同类的 div),并且仅在真正加载该循环之后。下一个问题是,虽然我无法弄清楚触发函数的元素的 id,这非常重要。调用“this”只是在 IE8 中获取窗口。你知道怎么做吗?
    • 我正在使用这个添加 onload 事件: function addOnload(element, funct) { if (element.attachEvent) return element.attachEvent('onload', funct);否则返回 element.addEventListener('load', funct, false); }
    【解决方案2】:

    最终我的解决方案是使用区间函数检查 iFrame 的主体是否可用。

    但是随着这些错误消失,我发现在 IE8 中打开 iFrame 的设计模式会删除它的所有内容。所以我最终只使用了一个 contenteditable div ..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 2015-04-03
      • 2013-01-20
      • 1970-01-01
      • 2016-05-03
      相关资源
      最近更新 更多