2011-07-19 9 views
1

私は、以下の例で何が起こるべきか不思議です。現在のブラウザ(Firefox 5、Chrome 14、Opera 11.50)では、テキストの上にiframeが追加されますが、これは標準化された動作か、将来変化する可能性のある一般的な動作ですか? MDNのドキュメントから本文内のスクリプトタグとappendChildの動作

<!doctype html> 
<html> 
    <head> 
    <title>Will the iframe be above or below the text?</title> 
    </head> 
    <body> 
    <script> 
     var e = document.createElement("iframe"); 
     document.body.appendChild(e); 
    </script> 
    <p>some text</p> 
    </body> 
</html> 

答えて

2

これは標準化された動作です。

スクリプトが実行されても、本文に子がありません。

+0

あなたは、スクリプトが遭遇したときに実行されなければならず、DOMの準備が整うまで延期することができないということをどのような規格が知っていますか? –

+0

@ marons、私は標準が何を言っているのか正確にはわかりません。しかし、私の経験では、スクリプトを ""の直前に置くか、[domready](http://stackoverflow.com/questions/1206937/javascript-domready)を使うだけで実行を遅らせることができると言います。 –

+0

より関連して、ウェブ上のほぼすべてのスクリプトは、(故意にまたは無意識に)この動作に依存しています。 – Ms2ger

1

https://developer.mozilla.org/En/AppendChild

は、指定した親ノードの子リストの末尾にノードを追加します。

@Moleculeは、ツリーがまだ構築されていない間にスクリプトが実行されるので、このノードは空のリストに追加されるため、最初の要素になります。おそらく実装固有のものです。

+0

分子は、スクリプトに遭遇したときに 'body'は子供を持たないと指摘しているので、何が起こるべきかまだ分かりません。 –

+0

これは木がまだ作られていないので意味があります。私は更新します。 – slaphappy

0

このスクリプトは最初に実行され、次にHTML要素<p>が実行されます。そのため、まずiframeを取得します。 iframeを一番下に置くには、スクリプトを一番下に置いてください。そう、それは標準的なことです。

+0

kbokの答えに直接矛盾しているようです。ブラウザは、ブラウザに遭遇したときにスクリプトを実行する必要がありますか(DOMの準備が整うまで実行を遅らせることはできません)。少なくともOpera Mobileは待っていて、最後に 'iframe'を追加します。 –

+0

と思われますが、あなたのスクリプトは、呼び出しを待っている関数やイベントハンドラには含まれていません。ブラウザが見つかるとすぐにブラウザが実行するようになっています。 – Arief

+0

あなたは正しいです、それがポイントです。ブラウザーは、bodyタグが閉じられてコードを実行するまで、スクリプトが見つかると(そしてbodyには子がありません)、スクリプトを実行する必要がありますか? –

0

準備ができたらDOMツリーを操作できます。したがって、ウィンドウのonloadイベント(任意のブラウザ)またはDOMContentLoadedイベント(非IE)にコードを記述する必要があります。

window.onload = function() { 
    var e = document.createElement("iframe"); 
    document.body.appendChild(e); 
} 
+0

これは当てはまりません。 DOMに存在する(開始タグが解析される)とすぐに要素を操作できます。 (これにより、MSIEが曖昧なエラーメッセージを表示してページを空白にすることがあります) – Quentin

関連する問題