2009-08-05 5 views
36

JSを使用してbody onloadイベントをクロスブラウザーでアタッチするにはどうすればよいですか?これほど簡単ですか?JS with body onloadイベントを添付する

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

あなたの例で既に行っていることを使用するだけではどうですか?それは私のために働きます – Zac

答えて

22

これはDOMContentLoadedを利用しています - 詳細ブログ記事交渉を - - onloadイベントの前に発射した - しかし、あなたはすべてのあなたのunobtrusivenessに固執することができます...

window.onload - Dean Edwardsここからコピーされた完全なコードですその同じブログのコメント。

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

さまざまなブラウザにはいくつかの方法があります。 jQueryのようなライブラリは、それをあなたのためにすべて処理するクロスブラウザインターフェイスを提供します。

19

なぜ使用しないでくださいwindow自身のonloadイベント?

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

私は間違っていない場合、それはすべてのブラウザ間で互換性があります。

+17

画像やその他を含む/すべて/がロードされた後にwindow.onloadが起こります。起動遅延を防ぐためにできるだけ早くDOMを操作したい場合は、window.onloadを使用できません。 – rpjohnst

9

document.body.onloadクロスブラウザですが、一つだけのコールバックを(あなたがそれに複数の機能を割り当てることはできません)ことができ、従来のメカニズム。

addEventListenerは、Internet Explorerではサポートされていません(attachEventを使用しています)ので、ライブラリ(jQuery、MooTools、あなたのブラウザの醜さ。

+1

Internet Explorerは、[バージョン9以降](http://msdn.microsoft.com/en-us/library/ie/ff975245(v=vs.85).aspx)のaddEventListenerをサポートしています。 – Sampson

2

jcalfee314さんのアイデアが私のために働いていた - 私はwindow.onload = onLoadを持っていたので、<body onload="...">の機能が呼び出されていなかった(これは私が制御できない)。

oldOnLoad = window.onload 
window.onload = onLoad; 

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

編集:

は、これはそれを修正Firefoxがそう oldOnLoad = window.onloadに置き換え、 oldOnLoad = document.body.onload;好きではなかったです。

+0

Rusky氏がAndreasの答えに触れているように、window.onloadはdocument.body.onloadとは異なります。 DOMだけでなく、すべてがロードされた後に発生します。 – Muhd

+0

Firefoxはバージョン10以上のバージョンではoldOnLoad = document.body.onloadをサポートしているので、私はこれを変更しています:if(oldOnLoad = document.body.onload){document.body.onload = onLoad; } else {oldOnLoad = window.onload; window.onload = onLoad; }。これは、ほとんどのブラウザで必要なものを私に与えてくれたようです。必要なときには、window.onloadオプションをフォールバックとして使用します。 – arlomedia

14

クロスブラウザwindow.loadイベント

function load(){} 

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

短くポイント! –

+1

恐ろしいもの:) – Jake

-3

なぜjQueryのを使用していませんか?

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

私が知る限り、これは完璧な解決策です。

+0

完全なドキュメントが読み込まれる前に起動します。 – rbrundritt