铬突变观察者
Chrome Mutation Observer
我试图在Chrome中使用突变观察者来监控何时添加新图像,这是我的代码到目前为止:
var observer = new window.MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
var m = mutation;
//console.log(m);
for (var j = 0; j < m.addedNodes.length; j++)
{
var nodes=m.addedNodes[j];
if (!nodes || !nodes.querySelectorAll)
{
// Not all nodes support querySelectorAll, e.g. text nodes.
continue;
}
var imgs= nodes.querySelectorAll("img");
for (var k = 0; k < imgs.length; k++)
{
if(imgs[k].src != undefined)
{
var img = imgs[k];
console.log(img);
}
}
}
});
});
var config = { childList: true };
// pass in the target node, as well as the observer options
observer.observe(window.document, config);
一个奇怪的事情正在发生:回调似乎被调用,但没有找到任何图像。当我打开控制台(Ctrl+Shift+J)时,代码开始正常工作,从该点添加的所有图像都打印出来。当我重新设置打开的控制台的大小时,也会发生同样的事情。
我必须为配置值设置额外的参数吗?为什么打开控制台突然使代码工作?
文档的子列表几乎从不改变。通常只有一个<html>
子结点。你可能想要subtree: true
在你的config
,所以观察者会运行,如果一个图像被添加到文档的深处。
这并不能解释为什么当控制台打开时代码还在工作。
相关文章:
- 检测 DIV 的高度何时变化,而无需轮询或突变观察者
- 突变观察者尚未定义
- 突变观察者未能检测到元素's删除dom
- 手动调整元素大小;不要在Chrome中激发突变观察者
- 未捕获的类型错误:无法执行'观察'在'突变观察者':参数1不是'节点'
- 阵列突变而不触发特定的观察者
- 突变观察者收到的突变记录的顺序是什么?
- 突变观察者 - 未检测到添加的某些节点
- 使用突变观察者将 DOM 元素列入黑名单
- 突变观察者仅获取特定内容
- 重新连接并断开突变观察者
- 突变观察者不起作用
- DOM突变观察者:如何支持DOM3突变事件的一个重要用途
- 突变观察者字符数据使用情况,没有子列表
- 突变观察者不检测文本变化
- 使突变观察者更快,资源更少
- 聚合物:用复杂观察者观察阵列突变
- 铬突变观察者
- Firefox不遵守突变观察者的childList配置参数
- 如何使用突变观察者对特定的样式属性更改做出反应