0

在页面在 IE 6 中完全呈现之前,我在运行一些 JavaScript 时遇到了问题(也许还有其他版本,但现在只是测试 IE6。Firefox 似乎还可以)。我可以通过window.onload像这样调用js来解决这个问题:

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

但是,我担心的是我会覆盖任何其他可能已经存在于window.onload. 该代码将用作库的一部分,因此我不能保证window.onload不会被其他人设置在其他地方。我宁愿将我的函数附加到这样的onload事件中:

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

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

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

社区有什么想法吗?提前感谢您的输入。

4

1 回答 1

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这样的库会为您处理此类已知问题。

于 2010-01-25T20:58:10.713 回答