クロスブラウザの方法で JS を使用して body onload イベントをアタッチするにはどうすればよいですか? これほど簡単ですか?
document.body.onload = function(){
alert("LOADED!");
}
クロスブラウザの方法で JS を使用して body onload イベントをアタッチするにはどうすればよいですか? これほど簡単ですか?
document.body.onload = function(){
alert("LOADED!");
}
これは、オンロードの前に起動する DOMContentLoaded を利用しますが、目立たないようにすることができます...
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;
window
独自のonload
イベントを使用してみませんか?
window.onload = function () {
alert("LOADED!");
}
私が間違っていなければ、それはすべてのブラウザーで互換性があります。
クロスブラウザwindow.loadイベント
function load(){}
window[ addEventListener ? 'addEventListener' : 'attachEvent' ]( addEventListener ? 'load' : 'onload', load )
document.body.onload
はクロスブラウザーですが、単一のコールバックしか許可しない従来のメカニズムです (複数の関数を割り当てることはできません)。
最も近い「標準」の代替手段は、addEventListener
Internet Explorer ではサポートされていない (これは を使用するattachEvent
) ため、ライブラリ (jQuery、MooTools、prototype.js など) を使用して、クロスブラウザーの醜さを抽象化することをお勧めします。
jcalfee314 のアイデアは私にとってはうまくいきました -window.onload = onLoad
の関数<body onload="...">
が呼び出されていないことを意味していました (これは制御できません)。
これで修正されました:
oldOnLoad = window.onload
window.onload = onLoad;
function onLoad()
{
oldOnLoad();
...
}
編集: Firefox は を気に入らなかったoldOnLoad = document.body.onload;
ため、 に置き換えましたoldOnLoad = window.onload
。
ブラウザごとに異なる方法を使用する必要があります。ただし、jQuery のようなライブラリは、すべてを処理するクロスブラウザー インターフェイスを提供します。
なぜjQueryを使わないのですか?
$(document).ready(function(){}))
私の知る限り、これは完璧なソリューションです。