7

js を使用して iframe ノードを動的に作成し、src 属性を設定し (1)、最後にノードを DOM に追加するとします (2)。

ブラウザーが src コンテンツを要求するのはいつですか? (1)の後?(2)の後?それとも予測不能ですか?ブラウザに依存しますか?

4

5 に答える 5

5

仕様には次のように記載されています。

iframe要素が最初にドキュメントに挿入されるとき、ユーザー エージェントはネストされたブラウジング コンテキストを作成し、次に 属性を初めて処理する必要があります。iframe


次のスニペットとローカル サーバーを使用して、多くのブラウザーで動作をテストしました。

var f = document.createElement('iframe');
f.src = '/?';

リソースが取得されることはありません (テスト済みのブラウザーの最低バージョンと最高バージョンのみを示しています)。

  • IE 6 - 9
  • FF3.6~12.0
  • クロム 1 - 18
  • オペラ 10.00 - 12.00
  • サファリ 4.0 - 5.1.5

そのため、フレームがドキュメントに追加されたときにのみリクエストが送信されます。

于 2012-05-04T19:20:06.493 に答える
1

(2)の後。それ以前はただのJSです。ブラウザは、DOM にアタッチされるまで動作しません。

于 2012-05-04T19:16:43.120 に答える
0

さて、私はあなたのためにすべてのブラウザをテストするつもりはありませんが、いつ/どこで iframe またはjs ファイルは、大量のセキュリティおよび一般的な実装に関する問題に該当するドキュメントに分類されます。ブラウザー ベンダーが他の方法でそれを行うのは重大な失敗であり、クロムが少しの実験でそのようにするという事実を確認できます。

私が考えることができる唯一の例外は、挿入前にロードできる画像です。

于 2012-05-04T19:17:42.217 に答える
0

私の経験では、常にノードが DOM に追加されたときです。Firebug またはその他の開発コンソールをロードして、これがいつ発生するかを確認できます。次のようなタイミングを確認するために、いくつかのアラートを投入します。

<script type="text/javascript">
    ifrm = document.createElement("IFRAME"); 
    ifrm.setAttribute("src", "http://blah.com/");
    alert('SRC SET'); 
    ifrm.style.width = 640+"px"; 
    ifrm.style.height = 480+"px"; 
    document.body.appendChild(ifrm);
    alert('ADDED TO DOM');
</script>

そのようなものを実行し、Firebug の「Net」タブを見て、ページがいつ要求されたかを確認します。appendChild が呼び出された後にのみ要求されると思います。

于 2012-05-04T19:18:49.303 に答える
0

アフター(2)!! これを見てください:http://jsfiddle.net/lbstr/td7DD/

firebug または chrome のコンソールを開き、net タブを見てください。Google の読み込みが表示されます。次に、3 行目をコメントアウトして、再度実行します。Google の読み込みは表示されません。

于 2012-05-04T19:19:54.837 に答える