JS

2009-08-05 28 views
36

ile bir body onload olayı ekleme Çapraz tarayıcıda JS ile bir body onload olayı nasıl eklenir? Bu kadar basit mi?JS

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

Neden sadece örneğinizde yaptığınız şeyi kullanmıyorsunuz? Benim için çalışıyor – Zac

cevap

22

Bu DOMContentLoaded yararlanır ancak tüm Unobtrusiveness sabitlenmesine olanak sağlar ...

window.onload - Dean Edwards - bu konuda blog yazısı müzakerelerinin daha Aynı blogun yorumları.

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

Farklı tarayıcılar için kullanmanız gereken birkaç farklı yöntem vardır. JQuery gibi kitaplıklar size her şeyi sizin için işleyen bir çapraz tarayıcı arayüzü sunar.

19

Neden window 's kullanıyor onload event?

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

Yanılmıyorsam, tüm tarayıcılarda uyumludur. kopyalanan tam kodu ve burada - daha önce onload ateşler - -

+17

window.onload sonra/her şey/yükler dahil olmak üzere yükler, vb dahil olmak üzere, başlangıç ​​gecikmesini önlemek için DOM manipüle başlamak istiyorsanız mümkün olduğunca gecikme önlemek için window.onload kullanamazsınız. – rpjohnst

9

document.body.onload bir çapraz tarayıcı, fakat sadece tek bir geri arama (buna birden fazla işlevi atayamazsınız) olanak sağlayan eski mekanizmasıdır.

yakın "standart" alternatif, addEventListener Internet Explorer (o attachEvent kullanır) tarafından desteklenmeyen, bu yüzden büyük olasılıkla çapraz soyut bir kitaplığı (jQuery, mooTools, prototype.js, vs.) kullanmak isteyeceksiniz sizin için tarayıcı çirkinlik.

+1

Internet Explorer 'addEventListener''ü [sürüm 9'dan itibaren] destekler (http://msdn.microsoft.com/en-us/library/ie/ff975245 (v = vs.85) .aspx). – Sampson

2

jcalfee314'ün fikri benim için çalıştı - window.onload = onLoad vardı, bu da <body onload="...">'daki işlevlerin çağrılmadığı anlamına geliyordu (kontrolüm yok).

oldOnLoad = window.onload 
window.onload = onLoad; 

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

Edit:

Bu düzelttim Firefox yüzden oldOnLoad = window.onload ile değiştirilir, oldOnLoad = document.body.onload; gibi değildi.

+0

Rusky'nin Andrea'nın yanıtı üzerine kaydettiği gibi, window.onload document.body.onload dosyasından farklıdır; Her şey yüklendikten sonra, yalnızca DOM’tan değil. – Muhd

+0

Firefox en az 10.10'a kadar eski sürümleri desteklediğinden beri oldOnLoad = document.body.onload, bunun bir varyasyonunu kullanıyorum: if (oldOnLoad = document.body.onload) {document.body.onload = onLoad; } else {oldOnLoad = window.onload; window.onload = onLoad; }. Bu, çoğu tarayıcıda ne istediğimi veriyor, gerektiğinde bir geri dönüş olarak window.onload seçeneğiyle. – arlomedia

14

Çapraz tarayıcı window.load olay

function load(){} 

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

Kısa ve noktaya! –

+1

Harika şeyler :) – Jake

-3

Neden jQuery kullanmıyor?

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

Bildiğim kadarıyla, bu mükemmel bir çözümdür.

+0

Bu, tüm belgenin yüklenmesinden önce patlar. – rbrundritt