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!");
}
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!");
}
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;
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.
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 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.