Dołącz Zdarzenie body onload za pomocą JS

Jak załączyć Zdarzenie body onload z JS w sposób między przeglądarkowy? Takie proste?

  document.body.onload = function(){
      alert("LOADED!");
  }
Author: jadarnel27, 2009-08-06

7 answers

To wykorzystuje DOMContentLoaded-który uruchamia się przed załadowaniem - ale pozwala trzymać się w całej swojej dyskretności...

Okno.onload-Dean Edwards - post na blogu mówi więcej o tym - a Oto kompletny kod skopiowany z komentarzy tego samego bloga.

// 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;
 22
Author: gnarf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-05 22:11:11

Dlaczego nie użyć window własnego onload zdarzenia ?

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

Jeśli się nie mylę, jest to kompatybilne we wszystkich przeglądarkach.

 20
Author: Andreas Grech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-05 22:08:11

Cross browser window.load event

function load(){}

window[ addEventListener ? 'addEventListener' : 'attachEvent' ]( addEventListener ? 'load' : 'onload', load )
 14
Author: Aamir Afridi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-14 11:55:08

document.body.onload jest cross-browser, ale starszy mechanizm, który pozwala tylko jeden callback (nie można przypisać wiele funkcji do niego).

Najbliższa" standardowa " alternatywa, addEventListener nie jest obsługiwany przez Internet Explorer( używa attachEvent), więc prawdopodobnie będziesz chciał użyć biblioteki (jQuery, MooTools, prototype.js itp.) do abstrakcji brzydoty między przeglądarkami dla Ciebie.

 9
Author: Marcello Bastea-Forte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-26 19:44:32

Pomysł Jcalfee314 zadziałał dla mnie - miałem window.onload = onLoad, co oznaczało, że funkcje w <body onload="..."> nie były wywoływane (nad czym nie mam kontroli).

To naprawiło:

oldOnLoad = window.onload
window.onload = onLoad;

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

Edit: Firefox nie spodobał się oldOnLoad = document.body.onload;, więc zastąpiony przez oldOnLoad = window.onload.

 2
Author: hajamie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-21 17:22:04

Istnieje kilka różnych metod, których musisz użyć dla różnych przeglądarek. Biblioteki takie jak jQuery zapewniają interfejs między przeglądarkami, który obsługuje to wszystko za Ciebie.

 -1
Author: rpjohnst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-05 22:02:40

Dlaczego nie używać jQuery?

$(document).ready(function(){}))
Z tego co wiem, to idealne rozwiązanie.
 -3
Author: jamesse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-10 12:59:48