我有几个问题(我对与Firefox有关的答案感兴趣,但其他浏览器的上下文答案也可以接受)。
对于与主文档断开连接的节点,是否会断开DOM Mutation事件?根据其中一个Mozilla错误中的信息,答案似乎是肯定的。有人可以给我一些例子吗?
查找节点是否断开连接的最快方法是什么?天真的方法是walk(使用node.parentNode)一直到我们达到null或文档。什么更快?
Firefox是否支持Webkit的“神奇iframe”功能?如果没有,如果该代码在Firefox中运行会发生什么?
与#3相关,iframe是否可以在与文档断开连接时继续加载?即它连接到主文档,加载已启动,然后移动到另一个文档(使用adoptNode()),但从未添加到新文档中的父节点。 iframe会继续加载吗?
提前致谢, 苏尼
答案 0 :(得分:1)
从绑定事件的文档/元素中删除节点(元素,文本节点,注释,..)时会触发DOMNodeRemoved
事件。
document.addEventListener('DOMNodeRemoved', function(event) {
console.log('Removed node: ' + event.target.nodeName);
});
对两种可能性进行基准测试:
一个简单的循环:
function isDisconnected(node) {
var rootElement = document.documentElement;
while (node) {
if (node === rootElement)
return false;
node = node.parentNode;
}
return true;
}
function isDisconnected(node) {
return !document.contains(node);
}
结果:http://jsperf.com/dom-contains-vs-parentnode
document.contains()
方法比循环方法快得多(47倍)(节点是否断开连接,document.contains
方法总是优于循环)。
提供的jsfiddle会移动其src
属性设置为"data:text/html,<script>alert(/Test/);<\/script>"
的iframe。加载此URL后,将显示警报。 显示两个警报表示不支持Magic iframe功能 。 显示一个警告表示支持功能。显示零警报意味着您的JavaScript被禁用,或者您的浏览器不支持数据URI。