我正在尝试开发一个对正在加载或更新的页面做出反应的 chrome 扩展。扩展程序将自身呈现iframe
为避免来自页面 CSS 的干扰。当我在启用了 Google Instant 的 Google 搜索结果页面上运行它时,我看到控件最初呈现正确,但是当查询和查询结果被修改时,控件仅重新呈现部分。正确检测到事件,但 DOM 未更新。我将问题隔离到以下代码,该代码被调用以重新渲染扩展 UI:
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)中进行测试。
编辑 2013 年 5 月 18 日:
抱歉,我忘记包含以下content(label)
功能:
function content(label) {
return label + ": " + (new Date()).getTime();
}