【发布时间】:2012-06-13 06:08:21
【问题描述】:
由于某种原因,当浏览器第一次启动该会话时,IE9 没有运行我的 JavaScript 代码 onload。它似乎只在用户刷新页面后运行 onload 。当调试控制台打开时,它也会运行 JavaScript。
如何使 JavaScript 在浏览器打开后运行加载?这只是IE9的bug吗?
我将重申这一点,以便您理解:如果您在启动新的浏览器会话后访问该站点,则代码不会运行。如果您在新选项卡中打开网站、重新加载页面或打开调试控制台,代码确实会运行
这是我用来运行我的脚本 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
【问题讨论】:
-
作为一个好的 javascript 提示,始终使用特征检测而不是浏览器检测。看到这段代码,我的眼睛很痛。您可以使用 jQuery 解决您遇到的大多数跨浏览器问题。 api.jquery.com/ready在ie8下能用吗?
-
我拒绝使用 jQuery。我会坚持手工编码谢谢。我对实际使用 JavaScript 感兴趣,而不是库。这段代码真的不是问题,我也在某个地方发现它认为它可以解决我的问题(它没有)。主要的一点是,当你重新加载页面或打开调试控制台时它可以正常工作,但当你第一次启动浏览器并转到该站点时它就不行了——这没有任何意义!
-
你能评论你的代码吗?我不明白你在做什么。您将 false 分配给“e”变量,然后在“else if (e)”中使用它。这是什么意思?
-
@caligula:这是确定 IE 的技巧。 IE 支持注释前面包含否定的
!。 -
如果你绝对坚持不使用 jQuery 那么 window.onload 无论如何都不应该在 IE9 中使用,而是你应该使用 window.addEventListener( "load", doLoad, false );看到这个:msdn.microsoft.com/en-us/library/ie/cc197055(v=vs.85).aspx
标签: javascript internet-explorer-9