用 JS 附加一个 body onload 事件

IT技术 javascript html events onload
2021-02-04 08:40:07

如何以跨浏览器的方式使用 JS 附加主体 onload 事件?就这么简单?

  document.body.onload = function(){
      alert("LOADED!");
  }
6个回答

这利用了 DOMContentLoaded - 它在加载之前触发 - 但允许您坚持所有不引人注目的......

window.onload - Dean Edwards - 博客文章对此进行了更多讨论 - 这是从同一博客的评论中复制的完整代码。

// 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.onload 发生在 /everything/ 加载后,包括图片等。如果你想尽快开始操作 DOM 以防止启动延迟,你不能使用 window.onload。
2021-03-31 08:40:07

跨浏览器 window.load 事件

function load(){}

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

document.body.onload 是一个跨浏览器,但是一个只允许一个回调的遗留机制(你不能为它分配多个函数)。

addEventListenerInternet Explorer 不支持最接近的“标准”替代方案(它使用attachEvent),因此您可能希望使用库(jQuery、MooTools、prototype.js 等)为您抽象跨浏览器的丑陋。

Internet ExploreraddEventListener 从版本 9 开始支持
2021-04-06 08:40:07

jcalfee314 的想法对我有用 - 我有一个window.onload = onLoad这意味着<body onload="...">没有调用中的函数(我无法控制)。

这修复了它:

oldOnLoad = window.onload
window.onload = onLoad;

function onLoad()
{
oldOnLoad();
...
}

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

正如 Rusky 在 Andreas 的回答中指出的那样,window.onload 与 document.body.onload 不同;它发生在所有东西都被加载之后,而不仅仅是 DOM。
2021-04-03 08:40:07
由于 Firefox 至少早在版本 10 就支持 oldOnLoad = document.body.onload,我使用了它的一个变体: if (oldOnLoad = document.body.onload) { document.body.onload = onLoad; } else { oldOnLoad = window.onload; window.onload = onLoad; }. 这似乎给了我大多数浏览器想要的东西,在需要时使用 window.onload 选项作为后备。
2021-04-11 08:40:07