Обратный вызов наблюдателя Webkit Mutation не запускается при изменении атрибута box box

Я пытаюсь контролировать изменения в поле выбора (или вложенные элементы option) с помощью новой функции Mutation Observer. Однако только "setAttribute" запускает обратный вызов наблюдателя мутации для меня.

Вот код, который я использую:

~function(doc, $) {
    var select = $('select');

    // http://www.w3.org/TR/dom/#mutation-observers
    var observer = new WebKitMutationObserver(function(mutations) {
        alert(mutations.length + " mutations happened");
    });

    observer.observe(select, {
        // monitor descendant elements – changing `selected` attr on options
        subtree: true,
        attributes: true
    });

    // this triggers Observer reaction, but doesn't update select box UI
    select.setAttribute('value', 'whee'); 
    // this updates select box UI, but doesn't trigger mutation observer callback
    select.value = "whee";
    // this also updates the UI, but doesn't trigger mutation observer callback
    select.getElementsByTagName('option')[0].selected = true;
    //
    // neither does manual selecting of options trigger mutation observer unfortunately :(

    button.addEventListener('click', function(e) {
        e.preventDefault();
        // my goal is to react to this change here 
        select.value = Math.random() > .5 ? "whee" : "whoa";
    }, false);

}(document, function(selector) { return document.querySelector(selector); });​

И вот этот код в действии http://jsfiddle.net/gryzzly/wqHn5/

Я бы хотел отреагировать на изменения атрибутов (selected on <option> или value on <select>), любое предложение о том, почему наблюдатель не реагирует, более чем приветствуется!

Я тестирую это в Chrome 18.0.1025.168 на Mac OS X. Производственный код, конечно же, также имеет префикс moz для конструктора и непереработанную версию, это тестовый код.

UPD.

Протестировал код в Firefox Nightly тоже, и он ведет себя так же, как в Chrome, а также в Chrome Canary. Я заполнил ошибку для обоих браузеров:

Прокомментируйте и проголосуйте за эти ошибки, если вы также найдете эту проблему раздражающей.

Ответы

Ответ 1

@gryzzly, я обновил ошибку Chromium с подробным ответом: http://code.google.com/p/chromium/issues/detail?id=128991#c4

Наблюдения за мутациями ограничены наблюдением за сериализованным состоянием DOM. Если вы хотите знать, могут ли наблюдатели Mutation наблюдать что-то, просто посмотрите, какие выходы innerHTML для элемента. если ты может видеть изменение состояния, отраженное в изменениях в разметке, которые который производит, тогда Наблюдатели Мутации должны быть в состоянии слышать о он.

TL; DR: это работает по назначению; для наблюдения за изменениями атрибутов IDL, такими как HTMLSelectElement.value, входные события, такие как onclick или onchange, вероятно, наилучшим образом.