回答:
window.onload = myOnloadFuncそして、<body onload="myOnloadFunc();">使用の異なる方法があり、同じイベントを。window.onloadただし、使用する方が邪魔にならない-JavaScriptをHTMLから取り出す。
一般的なJavaScriptライブラリ、Prototype、ExtJS、Dojo、JQuery、YUIなどはすべて、ドキュメントが読み込まれるときに発生するイベントのラッパーを提供します。ウィンドウのonLoadイベントをリッスンしてそれに反応することができますが、すべてのリソースがダウンロードされるまでonLoadは起動されないため、最後の巨大なイメージがフェッチされるまでイベントハンドラーは実行されません。場合によっては、まさにそれが望ましい場合もあれば、DOMの準備ができたときにリッスンする方が適切である場合もあります。このイベントはonLoadに似ていますが、画像などがダウンロードされるのを待たずに発生します。
myOnloadFunc()グローバルコンテキストで呼び出されます(thisを参照window)。JavaScriptで設定すると、要素のコンテキストで実行されます(thisイベントがトリガーされた要素を参照します)。この特定のケースでは、違いはありませんが、他の要素では違いがあります。
thisと、必要に応じて参照するオブジェクトをオーバーライドできます。
違いはありませんが、使用しないでください。
多くのブラウザーでは、window.onloadすべての画像が読み込まれるまでイベントはトリガーされません。標準ベースのブラウザには、DOMContentLoaded以前に発生すると呼ばれるイベントがありますが、IEではサポートされていません(この回答を書いている時点)。クロスブラウザーのDOMContentLoaded機能をサポートするJavaScriptライブラリーを使用するか、使用できるよく記述された関数を見つけることをお勧めします。jQueryの$(document).ready()は良い例です。
window.onload体なしで働くことができます。スクリプトタグのみでページを作成し、ブラウザで開きます。ページには本文は含まれていませんが、引き続き機能します。
<script>
function testSp()
{
alert("hit");
}
window.onload=testSp;
</script>
<!ELEMENT html (head, body)>[1]を指定<!ELEMENT HTML O O (%html.content;)し、html401は<!ENTITY % html.content "HEAD, BODY">[2]も指定します。html51はA head element followed by a body element.、htmlコンテンツについても述べています。[3] w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict w3.org/TR/html51/semantics.html#the -html-element- 一般的で使用中のHTML標準にはすべてbodyタグが必要だと思います。:)
Start tag: optional, End tag: optional
私は、一般的に>イベントを使用しないことを好み<body onload=""ます。振る舞いをコンテンツからできるだけ離した方がきれいだと思います。
とは言っても、body onloadを使用すると速度がわずかに向上する場合があります(通常、私にはかなりまれです)。
私はプロトタイプを使用するのが好きなので、一般的<headに私のページの>に次のようなものを入れます:
document.observe("dom:loaded", function(){
alert('The DOM is loaded!');
});
または
Event.observe(window, 'load', function(){
alert('Window onload');
});
上記は私がここで学んだトリックです。HTMLの外部にイベントハンドラーをアタッチするという概念がとても好きです。
(コードのスペルミスを修正するために編集します。)
客観的な質問に対する非常に多くの主観的な答え。「邪魔にならない」JavaScriptは、古い規則のように迷信を使用しないという迷信です。誰かの流行の宗教的信念に従ってではなく、確実に目標を達成できるようにコードを記述してください。
見つけた人:
<body onload="body_onload();">
過度に注意をそらすことは過度に大げさで、優先順位がまっすぐではありません。
通常、JavaScriptコードを別の.jsファイルに入れますが、HTMLでイベントハンドラーをフックすることに煩わしいことはありません。
window.onload-すべてのDOM、JSファイル、画像、iframe、拡張機能などが完全に読み込まれた後に呼び出されます。これは$(window).load(function(){});と同じです。
body onload=""-DOMが読み込まれると呼び出されます。これは$(document).ready(function(){});と同じです。
readyvs onloadイベントについての最大の誤解の1つとして一般的に引用されています。loadすべてのスクリプト、画像、スタイルシートを含むドキュメント全体が読み込まれた後に発生します。DOMContentLoadedDOMツリーが構築された後、画像などの前に起動します。DOMContentLoadedこれはdocument.ready、ではなくと同等loadです。
onloadは他の属性と同じように考えてください。たとえば、入力ボックスに次のように配置できます。
<input id="test1" value="something"/>
またはあなたは電話することができます:
document.getElementById('test1').value = "somethingelse";
onload属性も同じように機能しますが、value属性のように文字列ではなく関数を値として使用します。これは、「そのうちの1つだけを使用できる」理由も説明しています。window.onloadを呼び出すと、bodyタグのonload属性の値が再割り当てされます。
また、ここで他の人が言っているように、通常、スタイルとJavaScriptをページのコンテンツから分離しておく方がきれいです。そのため、ほとんどの人はwindow.onloadなどのjQueryのready関数を使用することをお勧めします。
<body onload = "">はwindow.onloadをオーバーライドする必要があります。
<body onload = "">を使用すると、ブラウザーによってはdocument.body.onloadがnull、未定義、または関数になる可能性があります(ただし、getAttribute( "onload")は、匿名関数の本体を文字列として取得するためにある程度一貫している必要があります)。 。window.onloadを使用すると、それに関数を割り当てると、window.onloadはブラウザー間で一貫して関数になります。それが重要な場合は、window.onloadを使用してください。
とにかく、JSをコンテンツから分離するには、window.onloadが適しています。window.onloadを使用できる場合でも、<body onload = "">を使用する理由はそれほど多くありません。
Operaでは、window.onloadおよび<body onload = "">(さらにはwindow.addEventListener( "load"、func、false))のイベントターゲットは、SafariやFirefoxのようなドキュメントではなくウィンドウになります。ただし、「これ」は、ブラウザ間のウィンドウになります。
つまり、重要な場合は、クラッドをラップして一貫性を持たせるか、それを行うライブラリを使用する必要があります。
コンテンツ、レイアウト、動作を分離することは、標準として認められています。したがって、window.onload()は<body onload="">、両方が同じ作業を行うよりも、使用するのに適しています。
さらに3年間眠った後、このスレッドが再び生まれ変わって申し訳ありませんが、多分私はようやくwindow.onload=fn1;overの明白な利点を見つけました<body onload="fn1()">。これは、関係するJSモジュールまたはESモジュールをお使いのとき:onload「古典」JSファイル(つまり、そのハンドラが存在なしでは言及<script type="module" … >、いずれかの方法が可能であり、あなたのとき、onload「モジュール」JSファイル(つまり、そのハンドラが存在するが、と呼ばれ<script type="module" … >、<body onload="fn1()">FN1」で失敗します()is not defined "エラー。理由はおそらく、HTMLが解析される前にESモジュールがロードされないためです…しかし、それは単なる私の推測です。とにかく、window.onload=fn1;モジュールで完全に動作します...