MutationObserver回调不会为EMBED节点触发
MutationObserver callback doesn't fire for EMBED nodes
由于某种原因,下面的代码片段只记录了1000多次"false",但从来没有记录过"true"。我不知道为什么,因为它似乎对任何其他元素都有效。
// create an observer instance
// log whether the mutation is made to an EMBED node
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.dir(mutation.target.nodeName == 'EMBED');
});
});
// configuration of the observer:
var config = {
attributes: true, // required
childList: true, // required
characterData: true, // required
subtree: true // get updates from the descendants, not just the children
};
// start observing immediately
// this works because "document" always exists
observer.observe(document, config);
我正在测试这个页面上的代码,在最新的Opera:
https://www.facebook.com/ccstandup/videos/vb.331786510170444/1177307595618327/(如果你使用最新的Opera,它应该是一个Flash视频实现与嵌入,但在其他浏览器它可能是视频。)
你知道我做错了什么吗?
target
是发生了变化的元素。当一个元素被插入时,改变的不是那个元素,而是它的父元素。检查mutation.target.nodeName == 'EMBED'
将检查嵌入元素的attributes
, childList
或characterData
是否发生了变化,如果它们没有变化。如果您需要查看embed
元素本身何时插入,则需要从父元素的角度查看它,例如
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type !== 'childList') return;
mutations.addedNodes.forEach(function(node){
if (node.nodeType !== Node.ELEMENT_NODE) return;
var embed = node.tagName.toLowerCase() === 'embed' ? node :
node.querySelector('embed');
// Found an embed element.
if (embed) console.log(embed);
});
console.dir(mutation.target.nodeName == 'EMBED');
});
});
相关文章:
- 节点导出返回一个空对象
- 可以前端maven插件使用节点,npm已经安装
- 在jstree中,如何将指定的节点集中到大型树上
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- 如何处理node.js节点mongodb中的连接和查询队列
- 将DOM节点值与字符串Javascript进行比较
- 节点fs.stat名称未定义
- 无法安装节点sass相关性
- 节点协同与生成器和Promise并行流量控制
- 节点.js将变量显示为 HTML
- 将节点数据分配给另一个变量jstree
- 如何在动态创建的节点上绑定函数
- 承诺在非节点式回调上使用Bluebird
- 通过从节点父级获取所有子级对节点进行排序(获取子级数组)
- 茉莉花节点测试;t正在运行
- MutationObserver回调不会为EMBED节点触发