变异观察者- DOM被回调函数改变
Mutation observer - DOM is changed by callback function
是否有办法,如何强制突变观察者忽略由回调函数引起的DOM变化?
现在我有:
var config = { attributes: true, childList: true, characterData: true };
var target = document.body;
var timer;
// create an observer instance
var observer = new MutationObserver(function(mutations) {
// fired when a mutation occurs
timer = setTimeout(function () {
_3rd_party_callback();
}, 500);
});
observer.observe(target, config);
问题是,_3rd_party_callback
回调引起DOM变化,所以它永远不会停止。正如它的名字所说,它是第三方函数,我不能更改(实际上它的DOM操作是它的目的)。
所以我所做的是在回调函数调用之前和之后分别断开和启动observer。
observer.disconnect()
_3rd_party_callback();
observer.observe(target, config);
它似乎可以工作,但我担心,由于事件的异步处理,我可能会禁用观察者,当其他更改发生并错过它们时。
不太可能有办法将更改从页面本身和回调中分离出来,但我会尝试一下。
如果observer
只会observe
目标而没有其他目标,您的想法将有效。这不是一个特别有效的解决方案,因为每次重置可观察对象时你都必须重新设置钩子,但它会起作用。
observer.disconnect()
_3rd_party_callback();
observer.observe(target, config);
由于所有DOM更改都发生在主事件循环中,因此您错过由_3rd_party_cb
以外的任何事件引起的事件的可能性为0。因此,您断开您的观察者,调用第三方代码,然后重新连接它—在DOM更改之间没有任何步骤。然而,如果第三方代码推迟了一个更改,例如setTimeout(messupthedom, 0)
,你仍然会在你的可观察对象中发现这些更改。
相关文章:
- JavaScript回调函数
- 如何在回调函数中执行流
- 回调函数中传递参数的困难(Google Map API Markers)
- 如何正确地将参数传递给RequireJS回调函数
- 回调函数在python代码中离线
- 从AJAX回调函数中分离数据
- 赋值后的回调函数
- 如何在javascript回调函数中返回多个变量
- 函数表达式,返回回调函数
- 等待回调函数执行
- JavaScript回调函数和Google Feed API
- 如何从ajax成功回调函数中读取javascript变量
- 正在保存JavaScript内部回调函数中的值
- 有没有什么方法可以停止Jquery中的animate(也可以停止完整的回调函数)
- 如何在javascript中添加带有回调函数的按钮点击事件作为window.conf
- 在Golang回调函数中启用CORS
- 在初始函数完成之前调用回调函数
- jQuery Mobile:如何在$.Mobile.changePage之前运行回调函数
- 即使使用回调函数也无法返回值
- 为什么prototypjs观察到回调函数有绑定