2010-01-25 94 views
0

我在IE6完全呈现页面之前运行的一些JavaScript有问题(也许还有其他版本,但现在只是测试IE6,Firefox似乎没问题)。我可以通过调用这样的window.onload的JS解决这个问题:Javascript执行页面渲染后IE6

window.onload = function(){doIt();} 

然而,我关心的是事实,我将覆盖其他任何可能已经在window.onload。该代码将用作库的一部分,因此我不能保证window.onload不会被其他人设置在其他地方。我将我的函数,而追加到onload事件是这样的:

window.onload += function(){doIt1();} 
window.onload += function(){doIt2();} 

但是,当我这样做,只是doit2()被调用。有没有办法为页面完全呈现时注册一个事件处理程序?我的第二个想法是将我的代码放入一个循环中,检查运行前是否存在所有对象。但我很害怕这可能会锁定浏览器。

只是为了一些背景信息,我的代码隐藏/显示的iFrames。我知道我可以使用iFrame的onload属性,但我需要在调用代码之前全部加载所有的iFrame。

社区的任何想法?预先感谢您的意见。

回答

6

使用该通用addLoadEvent功能...

function addLoadEvent(func) { 
    if(typeof window.onload != 'function') 
    window.onload = func; 
    else { 
    var oldLoad = window.onload; 

    window.onload = function() { 
     if(oldLoad) oldLoad(); 
     func(); 
    } 
    } 
} 

这基本上排队要执行的功能。它永远不会覆盖以前分配的处理程序。下面的示例使用...

addLoadEvent(function() { alert("One!"); }); 

addLoadEvent(two); 
function two() { 
    alert("Two!"); 
} 

我想提一提,像jQuery库照顾的已知问题这样对你。

+2

快速响应!几乎和我想要说的一样! 为了清晰起见,您可能希望将示例用法放入代码块中。 值得注意的是,这将始终将新功能添加到被调用链的末尾。这可以简单地通过改变第二部分中'func()'和'oldload()'调用的顺序来改变,或者可能通过将第二个变量传递给函数来改变。 – PeterJCLaw 2010-01-25 21:02:53

+0

+1完美!该死的,我喜欢这个网站! – 2010-01-25 21:21:00

+0

耶,这个答案让我超过10,000个代表:) – 2010-01-25 22:03:03