日期:2014-05-16  浏览次数:20469 次

iframe的问题,想不出来怎么简单描述。。。
function   f()
{        
        s   =   ' <iframe   id= "iframe1 "   src= "demo1.htm "> </iframe> ';        
        document.getElementById( 'divIframe ').innerHTML   =   s;
        alert(1);
alert(document.frames( 'iframe1 ').document.getElementById( 'div1 ').innerHTML);
}

当alert(1);注释掉后,最后一句alert()将提示缺少对象。


麻烦有经验的各位帮我解释一下~~

------解决方案--------------------
alert(1)被注释时
demo1.htm尚未加载完毕
就被调用了div1,这时,div1可能还没有加载进来,报错
而有了前面那个alert,时间上有一个停顿,所以div1已经被加裁了就不会报错
------解决方案--------------------
document.getElementById( 'divIframe ').innerHTML = s;//父页面加载demo1.htm
但页面加载需要一定的时间,浏览器要解析demo1.htm的DOM,
解析完毕后才能用getElementById这样的DOM方法来调用其中的元素。
alert(1)没有被注释,就给了浏览器足够的时间来加载demo1.htm,反之则没有。


------解决方案--------------------
这样可以遮盖这个问题
function f()
{
s = ' <iframe id= "iframe1 " src= "demo1.htm "> </iframe> ';
document.getElementById( 'divIframe ').innerHTML = s;
// alert(1);
setTimeout( "show() ",50);
}

function show()
{
alert(document.frames( 'iframe1 ').document.getElementById( 'div1 ').innerHTML);

}
------解决方案--------------------
没有加载完全的原因!!!
------解决方案--------------------
window.onload=f;
function f()
{
s = ' <iframe id= "iframe1 " src= "demo1.htm "> </iframe> ';
document.getElementById( 'divIframe ').innerHTML = s;
//alert(1);
alert(document.frames( 'iframe1 ').document.getElementById( 'div1 ').innerHTML);
}
先看看是不是页面加载问题!
------解决方案--------------------
我上面说的方法虽然可以掩盖这个问题,不过最好写在子页面上保险些
------解决方案--------------------
写在子页面中,BODY的onload事件中,这样就保证执行顺序,如果照上面我那样写,虽然大部分情况可以解决,但是如果客户端遇到网速慢,网络风暴等情况还是会报JS错误