我知道 MutationObservers 回调可能会在 DOM 更改后的某个时间被调用。但问题是:这些回调的时机是什么?回调是否进入浏览器的事件队列?如果是这样,他们什么时候进入队列?
是回调:
- 在 DOM 突变发生后立即调用,
- 操作 DOM 的函数完成后立即调用,
- 调用堆栈为空时立即调用,
- 在 DOM 突变发生后立即排队,
- 操作 DOM 的函数完成后立即入队,或者
- 在其他时间?
例如,如果执行以下代码(此处定义了 setZeroTimeout):
var target = document.body;
new MutationObserver(function(mutations) {
console.log('MutationObserver');
}).observe(target, {
attributes: true,
childList: true,
characterData: true
});
// Post message
setZeroTimeout(function () { console.log('message event'); });
// DOM mutation
target.setAttribute("data-test", "value");
“MutationObserver”应该在“消息事件”之前还是之后打印?或者它是实现定义的?
我在 Chromium 26 上的“消息事件”之前得到“MutationObserver”,尽管 DOM 突变是在消息发布之后。也许这表明 MutationObserver 回调没有使用事件队列。
我搜索了 HTML 规范、DOM 规范或浏览器实现文档,但没有找到与此行为相关的任何内容。
请问有关于 MutationObservers 回调时间的解释或文档吗?