Javascript执行后页面渲染IE6

时间:2010-01-25 20:56:25

标签: javascript iframe internet-explorer-6 rendering onload

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

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

但是,我担心的是我会覆盖window.onload中可能存在的任何其他内容。代码将用作库的一部分,因此我无法保证window.onload不会被其他人设置在其他位置。我宁愿将我的函数添加到onload事件中,如下所示:

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

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

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

来自社区的任何想法?提前感谢您的投入。

1 个答案:

答案 0 :(得分: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这样的图书馆为你处理这样的已知问题。