在开发中发现一个问题:使用div模拟弹出框,在Ie8下正常使用,ie6,ie7下无法正常显示,经查找发现如下问题:
1、ie6下 ,在iframe页面中使用jQuery的appendTo方法往顶层窗口,即window.top中appendChild时出现异常;
2、ie7下, 在iframe页面中使用jQuery的appendTo方法往顶层窗口,即window.top中appendChild时出现异常;
3、ie8下,没有以上问题。
代码如下:
var lyrs=$("<div><h1>HTML</h1></div>");
lyr3.appendTo( $(window.top.document.body) );
请教各位高手,ie6下是否支持这样的操作,如果没有有没有其他方法可以解决问题!
谢谢各位大虾

解决方案 »

  1.   


    var lyrs=$("<div><h1>HTML</h1></div>");
    lyr3.appendTo( $(window.frames['frameName'].document.body) );
    你看看alert(window.top.document.body);在ie8-有没有数据对象
      

  2.   

    iframe里是另外一个document树。所以把一个文档里创建的节点移动到另外一个里是会出错的:
    详见:http://blog.csdn.net/supNate/archive/2007/03/20/1535738.aspx为什么框架(frame)页面之间无法使用appendChild()? 收藏
    今天在写程序时遇到一个需求,是需要在一个页面中使用程序改变其中的一个框架页面的DOM结构,于是自然会用到appendChild这样的方法,例如:
    var div=document.createElement('div');
    window.frames['frameName1'].contentWindow.document.body.appendChild(div);尽管看上去没有任何问题,实际上在Firefox下它也能正常工作,但在IE下却偏偏不能正确运行,着实很郁闷。第一想法就是是:唉,该死的IE bug还真多!
    无奈的开始google:frame+appendChild,希望能找到一些hack方法,倒有很多人建议用innerHTML,这个我也想过,太不方便,很多事件都无法绑定。
    继续搜寻……,终于找到一篇文章解决了这个问题,基本意思是这样的:
    document表示一个页面DOM结构的根节点,而document.createElement()方法是在document本身的结构中创建一个节点,因此想把一个文档的节点移动到另外一个文档的节点当中去,是不可行的。
    呵呵,原来如此啊!这样的解释的确很合乎道理的,上面代码是有点问题,应该用子框架的文档(document)来创建节点:
    var doc=window.frames['frameName1'].contentWindow.document;
    var div=doc.createElement('div');
    doc.body.appendChild(div);这样在FF和IE下都能正确运行了!但之前FF下为什么也能运行呢?有两种解释:
    1。FF有自己的容错性,就像IE就有很多讨厌的容错性。
    2。因为iframe是当前页面的节点,而iframe中的文档自然也认为是父页面的子节点了,只不过具有父页面根结点的所有特征,于是既然框架页面和父页面是在一个根下面,那么节点的互相移动也合乎道理了,呵呵,即使有点勉强,倒也能说的通的!于是在这个问题上FF和IE孰是孰非也就很难说清楚了,只是辛苦了我们这些写程序的,现在大家明白怎么回事儿也就行了。
      

  3.   


    alert(window.top.document.body); 有值的,甚至alert(window.top.document.body.innerHTML);还可以alert出父窗口的代码。
    而对于lyr3.appendTo( $(window.frames['frameName'].document.body) );问题是,调用该代码的函数在ifram的页面中,即在id为frameName的ifram中,所以没办法这样使用。
      

  4.   


    可以在父页面调用frame页面的方法、
    window.frames['frameName'].function();
      

  5.   

    多谢dojo兄弟,按照这种思路,问题确实解决了。分给你了!O(∩_∩)O哈哈~