2012-05-21 81 views
1

我正在构建一个CMS应用程序,我现在正在为IE进行调试。但事情发生我无法理解。无法访问IE中的iframe内容

首先我有一个页面内容的div。我提取div的内容和JavaScript我创建一个iFrame并将其附加到div。这是为了制作WYSIWYG编辑器。然后,当我想将内容添加到iFrame时,问题就开始了。由于某些原因,IE无法访问iFrame的正文。我可以提醒iFrame的文档,它给了我[对象文档]或[对象HTMLDocument],但当我然后警告身体我得到空。

我用这个函数用于获取该文件的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之前发出警报时,我突然发现了身体。

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

回答

4

我在IE 8和9中测试。最奇怪的是,当我在IE 8中首次调用iframedoc之前发出警报时,我突然得到了身体。

这听起来就好像你要为浏览器太快 - iframe中可能只是没有满载然而,当你尝试用它搞乱,在警报因此增加给它,它需要额外的时间。尝试使用iframe元素上的onload事件推迟一些代码。

+0

这绝对好像是这种情况!将代码添加到iFrame的onload事件中,表明首先添加了iFrame(使用设置所有具有相同类的div的循环),并且仅在该循环真正加载之后。接下来的问题是,我无法弄清触发函数的元素的id,这非常重要。调用'this'只是在IE8中获取窗口。你有什么想法如何去做这件事? – Raapwerk

+0

我添加使用该onload事件: 功能addOnload(元件,本功能){ \t如果(element.attachEvent)返回 \t \t element.attachEvent( '的onload',本功能); \t else else element.addEventListener('load',funct,false); } – Raapwerk

0

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

但随着这些错误消失,我发现在IE8中为iFrame开启designmode将它的所有内容都删除了。所以我结束了只是使用contenteditable div ..