使用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。