【问题标题】:Javascript Execute After Page Render IE6页面呈现 IE6 后执行 Javascript
【发布时间】:2010-01-26 04:58:10
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 快速响应!几乎就是我要放的东西!为了清楚起见,您可能希望将示例用法放入代码块中。值得注意的是,这将始终将新函数添加到被调用链的末尾。这可以通过更改第二部分中func()oldload() 调用的顺序来简单地更改,或者如果需要更改,也可以将第二个变量传递给函数。
    • 是的,这个答案让我获得了超过 10,000 个代表 :)
    猜你喜欢
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多