我想向 body onload 添加一个事件监听器,并在现有事件监听器之后执行。但执行却是相反的。为什么 ?如何解决这个问题?
https://jsfiddle.net/0LcL1usj/
<html>
<script>
function test() {
alert('SHOULD BE FIRST');
}
</script>
<script>
// Dean Edwards/Matthias Miller/John Resig
function init() {
// quit if this function has already been called
if (arguments.callee.done) return;
alert("hello init");
// 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;
</script>
<body onload="test();">
</body>
</html>
最佳答案
onload
事件发生在 DOMContentLoaded
之后:
-
DOMContentLoaded
当整个 DOM 构建完成时触发, -
onload
当所有链接资源(字体、图像、脚本、iframe...)另外加载时触发。
关于javascript - 主体加载注入(inject): how to restore order sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34888817/