Я знаю, что обратные вызовы 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» до «события сообщения» или после него? Или это определяется реализацией?
Я получаю «MutationObserver» перед «событием сообщения» на Chromium 26, хотя мутация DOM происходит после публикации сообщения. Возможно, это указывает на то, что обратные вызовы MutationObserver не используют очередь событий.
Я искал в Google спецификацию HTML, спецификацию DOM или документы по реализации браузера, но не нашел ничего, связанного с этим поведением.
Любое объяснение или документация о времени обратных вызовов MutationObservers, пожалуйста?
message event
предшествуетMutationObserver
. ОбработчикpostMessage
вsetZeroTimeout
запускает и запускает событие (которое добавляется в очередь событий), а затем вызовsetAttribute
отключает наблюдателя (и это, вероятно, также добавляет событие в очередь после события сообщения). - person apsillers   schedule 28.01.2013MutationObserver
s не используют очередь событий. - person apsillers   schedule 28.01.2013postMessage
могут вести себя не так, как другие события, но я не уверен в этом на 100%. - person apsillers   schedule 28.01.2013