37 votes

Attacher un événement de chargement de corps avec JS

Comment attacher un événement de chargement de corps avec JS de manière croisée? Aussi simple que ça?

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

22voto

gnarf Points 49213

Cela profite de DOMContentLoaded - qui se déclenche avant la charge - mais vous permet de conserver toute votre discrétion ...

window.onload - Dean Edwards - Le billet de blog en parle davantage - et voici le code complet copié à partir des commentaires de ce même blog.

 // 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;
 

21voto

Andreas Grech Points 39188

Pourquoi ne pas utiliser window propre onload événement?

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

Si je ne me trompe pas, c'est compatible avec tous les navigateurs.

14voto

Aamir Afridi Points 3865

// Événement cross.windows window.load

 function load(){}

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

9voto

document.body.onload est un cross-browser, mais un héritage mécanisme qui permet une seule de rappel (vous ne pouvez pas attribuer plusieurs fonctions à elle).

Le plus proche de la "norme" alternative, addEventListener n'est pas pris en charge par Internet Explorer (il utilise attachEvent), de sorte que vous aurez probablement envie d'utiliser une librairie (jQuery, MooTools, prototype.js, etc.) l'abstraction de la croix-navigateur de la laideur pour vous.

2voto

hajamie Points 638

L'idée de jcalfee314 a fonctionné pour moi - j'avais un window.onload = onLoad ce qui signifiait que les fonctions dans <body onload="..."> n'étaient pas appelées (sur lesquelles je n'ai pas de contrôle).

Cela l'a corrigé:

 oldOnLoad = window.onload
window.onload = onLoad;

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

Edit: Firefox n'aimait pas oldOnLoad = document.body.onload; , donc remplacé par oldOnLoad = window.onload .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X