IE9没有运行javascript onload

Cha*_*III 4 javascript internet-explorer-9

出于某种原因,当第一次启动浏览器时,IE9没有运行我的JavaScript代码onload.它似乎只在用户刷新页面后运行onload.它还将在调试控制台打开时运行JavaScript.

如何使JavaScript在浏览器打开后运行onload?这只是IE9的一个错误吗?

我将重申这一点,以便您理解:如果您在启动新的浏览器会话后访问该站点,则代码不会运行.代码DOES,如果你在新标签中打开该网站,或重新载入页面,或打开调试控制台运行

这是我用来运行脚本onload的函数(在NORMAL浏览器中可以正常工作):

(function (i) {
  var u = navigator.userAgent;
  var e = /*@cc_on!@*/
  false;
  var st = setTimeout;
  if (/webkit/i.test(u)) {
    st(function () {
      var dr = document.readyState;
      if (dr == "loaded" || dr == "complete") {
        i()
      } else {
        st(arguments.callee, 10);
      }
    }, 10);
  } else if ((/mozilla/i.test(u) && !/(compati)/.test(u)) || (/opera/i.test(u))) {
    document.addEventListener("DOMContentLoaded", i, false);
  } else if (e) {
    (function () {
      var t = document.createElement('doc:rdy');
      try {
        t.doScroll('left');
        i();
        t = null;
      } catch (e) {
        st(arguments.callee, 0);
      }
    })();
  } else {
    window.onload = i;
  }
})(init); //init is the function to call onload
Run Code Online (Sandbox Code Playgroud)

Rya*_*yan 14

我遇到了与你完全相同的问题.在我开始幻灯片放映之前,我想要确保预先加载了一组图像.我正在利用

$(window).load(function(){
    //All my code
});
Run Code Online (Sandbox Code Playgroud)

而这正是我所面对的.

  • 当我在IE中复制并粘贴URL时,onload事件似乎没有触发.
  • 如果我使用F12打开控制台,然后通过浏览器中的URL并按下回车键,那么一切似乎都正常.
  • 现在我至少打开了一次控制台,
    • 如果我关闭控制台然后重新加载页面,onload就会被触发.
    • 如果我输入了URL然后按回车键,那么onload就会被触发.

我花了几天时间才弄明白我做错了什么.

问题出在console.log语句中.在我的代码中的很多地方,我做了很多控制台日志记录.甚至我正在使用的一个插件 - jplayer在代码中的某处有一个未注释的控制台消息.

问题是,除非您在IE中至少打开一次控制台,否则控制台对象不可用.这意味着代码将在遇到的第一个console.log时失败.

现在,我没有心情在IE浏览器中评论所有我的console.log语句.所以,这就是我所做的.在我的document.ready jquery函数的顶部,我写了这段小代码.

if(!window.console){
    console={};
    console.log = function(){};
}
Run Code Online (Sandbox Code Playgroud)

它基本上做的是创建一个虚拟的console.log函数占位符,以便代码可以在IE中运行,但只有console.log是您在代码或插件中使用的唯一控制台函数时它才会起作用.

只需2美分.在这个问题上拉我的头发的时间超过了我承认的时间.我希望这对至少某人有用.