Wie verknüpfe ich ein Body-Onload-Ereignis mit JS im Cross-Browser-Modus? So einfach ist das?Anfügen eines Body-Onload-Ereignisses mit JS
Antwort
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;
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.
Warum nicht window
eigenen onload
Ereignis verwenden?
Wenn ich mich nicht irre, ist das in allen Browsern kompatibel.
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
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.
Internet Explorer unterstützt 'addEventListener' [ab Version 9] (http://msdn.microsoft.com/en-us/library/ie/ff975245 (v = vs.85) .aspx). – Sampson
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.
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
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
Cross-Browser-window.load Ereignis
function load(){}
window[ addEventListener ? 'addEventListener' : 'attachEvent' ](addEventListener ? 'load' : 'onload', load)
Kurz und bündig! –
Super Zeug :) – Jake
Warum mit jQuery nicht?
$(document).ready(function(){}))
Soweit ich weiß, ist dies die perfekte Lösung.
Dies wird ausgelöst, bevor das vollständige Dokument geladen wird. – rbrundritt
- 1. Anfügen ng-Klick mit eckigen js Direktive
- 2. Anfügen eines Arrays mit Powershell
- 3. Anfügen eines Tags
- 4. Anfügen eines vorhandenen Array
- 5. Anfügen eines Satzes mit einer Textdatei
- 6. Anfügen eines Objekts an ein Objekt Eigenschaften und Array von Objekt mit Winkel js
- 7. Anfügen eines std :: vector mit seinen eigenen Elementen mit Iteratoren
- 8. JS umleiten zu einer anderen Seite und Klasse an eines seiner Elemente anfügen
- 9. Auslösen eines JS in JS?
- 10. Anfügen Zeichenfolge mit Ansichtsname
- 11. Syntaxfehler mit jQuery anfügen
- 12. Anfügen eines gelöschten Objekts an Kontext
- 13. Anfügen eines vorhandenen DataFrame mit Ausgabe von def als DataFrame
- 14. Python Lxml - Anfügen eines vorhandenen xml mit neuen Daten
- 15. Anfügen eines SVG an das DOM mit Webpack
- 16. Anfügen eines benutzerdefinierten Syntax-Checkers an meine benutzerdefinierte DSL-Datei?
- 17. XSLT Anfügen an Ergebnisdokument
- 18. Erstellen eines Sunburst-Diagramms mit D3.js
- 19. Erstellen eines Js-Objekts mit Object.create (null)?
- 20. Füllen eines Rasters mit Kendo js
- 21. Den Durchschnitt eines Arrays mit JS finden
- 22. Anfügen von Textdateien mit Batchdateien
- 23. Anfügen mehrere Segmente mit System.Uri
- 24. Anfügen Element mit Jquery Wähler
- 25. Aktualisieren eines JS-Objekts
- 26. Anfügen jQuery toJavaScript nativen
- 27. Anfügen aktuelle Datum der Protokolldatei mit Log4Net
- 28. Bilder horizontal anfügen
- 29. Anfügen html Raum Algorithmus
- 30. C++ Win32: Anfügen eines untergeordneten Fensters an das Hauptfenster
Warum nicht einfach das verwenden, was Sie bereits in Ihrem Beispiel getan haben? Es funktioniert für mich – Zac