Расширение 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();
}