1

いくつか質問があります (Firefox に関連する回答に興味がありますが、他のブラウザーのコンテキストでの回答も受け入れられる可能性があります)。

  1. DOM Mutation イベントは、メイン ドキュメントから切断されたノード、つまり切断されたノードに対して発生しますか? Mozilla バグの 1 つに存在する情報によると、答えはイエスのようです。誰かが私にいくつかの例を教えてもらえますか?

  2. ノードが切断されているかどうかを確認する最も簡単な方法は何ですか? 単純なアプローチは、null またはドキュメントに到達するまで (node.parentNode を使用して) ずっと歩きます。もっと速いものはありますか?

  3. Firefox は Webkit の「マジック iframe」機能をサポートしていますか? そうでない場合、そのコードが Firefox で実行されるとどうなりますか?

  4. #3に関連して、iframeがドキュメントから切断されている間も読み込みを続けることは可能ですか? つまり、メイン ドキュメントに接続され、読み込みが開始され、(adoptNode() を使用して) 別のドキュメントに移動されましたが、新しいドキュメントの親ノードには追加されませんでした。iframe の読み込みは続行されますか?

前もってありがとう、スニル

4

1 に答える 1

1
  1. DOMNodeRemovedイベントがバインドされているドキュメント/要素からノード (要素、テキスト ノード、コメントなど) が削除されると、イベントが発生します。

    document.addEventListener('DOMNodeRemoved', function(event) {
        console.log('Removed node: ' + event.target.nodeName);
    });
    
  2. 2 つの可能性のベンチマーク:

    • 単純なループ:

      function isDisconnected(node) {
          var rootElement = document.documentElement;
          while (node) {
              if (node === rootElement)
                  return false;
              node = node.parentNode;
          }
          return true;
      }
      
    • document.contains( node ):

      function isDisconnected(node) {
          return !document.contains(node);
      }
      


    結果: http://jsperf.com/dom-contains-vs-parentnode
    メソッド はdocument.contains()、ループ メソッドよりも大幅に (47 倍) 高速です (ノードが切断されているかどうかにかかわらず、document.containsメソッドは常にループよりも優れています)。

  3. このフィドルを使用してテストしたように、 Magic iframe 機能はFirefox では機能し ません: http://jsfiddle.net/GRFsd/その他、フレームをアンロードせずに。これはマジック iframe機能と呼ばれます。

提供されたjsfiddlesrcは、属性が に設定されている iframe を移動し"data:text/html,<script>alert(/Test/);<\/script>"ます。この URL が読み込まれると、アラートが表示されます。2 つのアラートが表示される場合は、Magic iframe 機能がサポートされていないことを意味します。表示される1 つのアラートは、その機能がサポートされていることを意味します。アラートが表示されない場合は、JavaScript が無効になっているか、ブラウザがデータ URI をサポートしていないことを意味します。

于 2012-04-14T21:38:57.783 に答える