Расширение chrome рендерится непоследовательно на страницах мгновенного доступа Google

Я пытаюсь разработать расширение Chrome, которое реагирует на загрузку или обновление страниц. Расширение отображается в виде iframe чтобы избежать вмешательства со страницы CSS. Когда я запустил его на странице результатов поиска Google с включенным Google Instant, я увидел, что элемент управления изначально правильно отображался, но когда запрос и результаты запроса были изменены, элемент управления отображался повторно только частично. Событие было обнаружено правильно, но DOM не был обновлен. Я изолировал проблему с помощью следующего кода, который вызывается для повторного рендеринга интерфейса расширения:

function updatePanel() {
    console.log("updatePanel called");
    var $container = getPanel();
    var $preview = $container.find('iframe').contents().find('div');

    console.log('clearing preview div',$preview);
    $preview.empty();

    $preview.append($('<div>').text(content("div")));

    var $table = $('<table border="2" cellspacing="0" cellpadding="0">'); 
    var $cell = $('<td>');
    $table.append($('<tr>').append($cell));

    $cell.append($('<div>').text(content("table"))); // Line A
    $preview.append($table); // Line B

    console.log('widget is done, generated html:',$cell);
    return true;
}

Если строка с комментарием //Line B перемещается вперед //Line Aсодержимое таблицы не отображается. Если //Line B следует //Line A, все делает правильно. Тем не менее, в обоих случаях сгенерированный DOM должен быть идентичным.

Коррелирующая ошибка в том, что я не могу применить анимацию jQuery к содержимому таблицы, так как все модификации DOM, которые следуют Line B не могут быть применены.

Это документированная ошибка? Я тестирую в текущей версии Chrome (версия 26.0.1410.64 m).

ИЗМЕНИТЬ 18/5/2013:

Извините, я забыл включить content(label) функция:

function content(label) {
    return label + ": " + (new Date()).getTime();
}

0 ответов

Другие вопросы по тегам