1

我有几个问题(我对与 Firefox 相关的答案感兴趣,但其他浏览器上下文中的答案也可能是可以接受的)。

  1. DOM Mutation 事件是否会因与主文档断开连接的节点而触发,即断开连接?根据 Mozilla 错误之一中的信息,答案似乎是肯定的。有人可以给我一些例子吗?

  2. 查找节点是否断开连接的最快方法是什么?天真的方法是一直走(使用 node.parentNode)直到我们到达 null 或文档。有更快的吗?

  3. Firefox 是否支持 Webkit 的“魔法 iframe”功能?如果不是,如果该代码在 Firefox 中运行会发生什么?

  4. 与#3 相关,iframe 是否可以在与文档断开连接时继续加载?即它连接到一个主文档,开始加载,然后移动到另一个文档(使用采用节点()),但从未添加到新文档中的父节点。iframe 会继续加载吗?

在此先感谢, 苏尼尔

4

1 回答 1

1
  1. DOMNodeRemoved当一个节点(元素、文本节点、注释、..)从事件绑定到的文档/元素中删除时,会触发该事件。

    document.addEventListener('DOMNodeRemoved', function(event) {
        console.log('Removed node: ' + event.target.nodeName);
    });
    
  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()方法比循环方法快得多(47x)(无论节点是否断开连接,该document.contains方法始终优于循环)。

  3. Magic iframe 功能在 Firefox 中不起作用,使用此小提琴进行测试:http: //jsfiddle.net/GRFsd/
    对于不了解此功能的人:在 Chrome 中,iframe 可以一个文档移动到其他,无需卸载框架。这称为神奇的 iframe功能。

提供的jsfiddle移动一个 iframe,其src属性设置为"data:text/html,<script>alert(/Test/);<\/script>". 加载此 URL 时,会显示一个警报。出现两个警报意味着不支持Magic iframe 功能。出现一个警报意味着该功能受支持。零警报显示意味着您的 JavaScript 已禁用,或者您的浏览器不支持数据 URI。

于 2012-04-14T21:38:57.783 回答