2009-08-05 11 views

Antwort

22

Dies nutzt DOMContentLoaded - die vor dem onload feuert - aber können Sie in allen Unauffälligkeit bleiben ...

window.onload - Dean Edwards - Der Blog-Beitrag spricht mehr darüber - und hier ist die komplette Code aus den kopierten Kommentare desselben Blogs.

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

Es gibt verschiedene Methoden, die Sie für verschiedene Browser verwenden müssen. Bibliotheken wie jQuery bieten Ihnen eine Cross-Browser-Oberfläche, die alles für Sie erledigt.

19

Warum nicht window eigenen onload Ereignis verwenden?

Wenn ich mich nicht irre, ist das in allen Browsern kompatibel.

+17

window.onload passiert, nachdem/alles/ist geladen, einschließlich Bilder usw. Wenn Sie beginnen möchten, das DOM so schnell wie möglich zu manipulieren, um Startverzögerung zu verhindern, können Sie window.onload nicht verwenden. – rpjohnst

9

document.body.onload ist ein Cross-Browser, sondern ein Vermächtnis Mechanismus, der nur einen einzigen Rückruf erlaubt (mehrere Funktionen nicht zuordnen können).

Die nächstgelegene "Standard" Alternative wird addEventListener nicht vom Internet Explorer unterstützt (es verwendet attachEvent), so dass Sie wahrscheinlich wollen eine Bibliothek (jQuery, MooTools, prototype.js, etc.) verwenden, um die grenzüberschreit abstrakt Browser-Hässlichkeit für dich.

+1

Internet Explorer unterstützt 'addEventListener' [ab Version 9] (http://msdn.microsoft.com/en-us/library/ie/ff975245 (v = vs.85) .aspx). – Sampson

2

Die Idee von jcalfee314 funktionierte für mich - ich hatte eine window.onload = onLoad, was bedeutete, dass die Funktionen in <body onload="..."> nicht aufgerufen wurden (was ich nicht kontrollieren kann). Diese

es fest:

oldOnLoad = window.onload 
window.onload = onLoad; 

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

Edit: Firefox nicht oldOnLoad = document.body.onload; gefallen hat, so mit oldOnLoad = window.onload ersetzt.

+0

Wie Rusky auf Andreas 'Antwort hingewiesen hat, unterscheidet sich window.onload von document.body.onload; Es passiert, nachdem alles geladen ist, und nicht nur das DOM. – Muhd

+0

Da Firefox mindestens so weit zurück wie Version 10 unterstützt oldOnLoad = document.body.onload, verwende ich eine Variation davon: if (oldOnLoad = document.body.onload) {document.body.onload = onLoad; } else {oldOnLoad = window.onload; window.onload = onLoad; }. Dies scheint mir bei den meisten Browsern das zu geben, was ich möchte, mit der Option window.onload als Fallback bei Bedarf. – arlomedia

14

Cross-Browser-window.load Ereignis

function load(){} 

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

Kurz und bündig! –

+1

Super Zeug :) – Jake

-3

Warum mit jQuery nicht?

$(document).ready(function(){})) 

Soweit ich weiß, ist dies die perfekte Lösung.

+0

Dies wird ausgelöst, bevor das vollständige Dokument geladen wird. – rbrundritt

Verwandte Themen