使用JS附加一个body onload事件

如何以跨浏览器的方式附加一个身体onload事件与JS? 像这样简单?

document.body.onload = function(){ alert("LOADED!"); } 

这利用了DOMContentLoaded – 在onload之前触发 – 但允许你坚持你的所有不显眼的东西…

window.onload – 院长爱德华兹 – 博客文章更多地谈到它 – 这里是从同一个博客的评论复制完整的代码。

 // Dean Edwards/Matthias Miller/John Resig function init() { // quit if this function has already been called if (arguments.callee.done) return; // flag this function so we don't do the same thing twice arguments.callee.done = true; // kill the timer if (_timer) clearInterval(_timer); // do stuff }; /* for Mozilla/Opera9 */ if (document.addEventListener) { document.addEventListener("DOMContentLoaded", init, false); } /* for Internet Explorer */ /*@cc_on @*/ /*@if (@_win32) document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); var script = document.getElementById("__ie_onload"); script.onreadystatechange = function() { if (this.readyState == "complete") { init(); // call the onload handler } }; /*@end @*/ /* for Safari */ if (/WebKit/i.test(navigator.userAgent)) { // sniff var _timer = setInterval(function() { if (/loaded|complete/.test(document.readyState)) { init(); // call the onload handler } }, 10); } /* for other browsers */ window.onload = init; 

为什么不使用window自己的onload事件?

 window.onload = function () { alert("LOADED!"); } 

如果我没有弄错,那么所有浏览器都是兼容的。

跨浏览器window.load事件

 function load(){} window[ addEventListener ? 'addEventListener' : 'attachEvent' ]( addEventListener ? 'load' : 'onload', load ) 

document.body.onload是一个跨浏览器,但是一个传统的机制,只允许一个callback(你不能分配多个function)。

最接近的“标准”select, addEventListener不被Internet Explorer(它使用attachEvent )支持,所以你可能想要使用一个库(jQuery,MooTools,prototype.js等)来为你抽象出跨浏览器的丑陋。

jcalfee314的想法为我工作 – 我有一个window.onload = onLoad这意味着在<body onload="...">函数没有被调用(我没有控制权)。

这固定了它:

 oldOnLoad = window.onload window.onload = onLoad; function onLoad() { oldOnLoad(); ... } 

编辑:Firefox不喜欢oldOnLoad = document.body.onload; ,所以换成oldOnLoad = window.onload

有几种不同的方法可以用于不同的浏览器。 像jQuery这样的库为您提供了一个跨浏览器的界面,可以为您处理所有这些。

这是一个想法,但我还没有testing过….保存对document.body.onload的引用,如果不是未定义的,则用新函数replaceonload引用来调用它。 您可以重复多次。 然而这不同步; 那很重要吗?

为什么不使用jQuery?

 $(document).ready(function(){})) 

据我所知,这是一个完美的解决scheme。