这是Google Chrome扩展程序开发。我正在使用内容脚本注入网页。但是,有些网页有自己的ajax脚本,可以动态更改内容。我如何等到这些脚本完成,因为在完成之前我的脚本无法获得正确的内容?
例如,
1-在Google搜索结果页面上
2-我希望将“text”附加到每个搜索结果项的标题上,这可以通过调用轻松完成,
$('h3').append("text");
3-然后听取
完成的搜索查询更改$('input[name="q"]').change( function(eventObj){
console.log("query changed");
// DOESN'T work
$('h3').append("text");
});
最后一行不起作用可能因为当它执行时页面仍然刷新,$('h3')
不可用。当页面上的查询发生变化时,Google会使用ajax刷新搜索结果。
所以问题是如何捕获此更改并且仍然能够每次成功附加“text”?
修改
尝试过但都没有工作:
$('h3[class="r"]').delay(1000).append("text");
使用.delay()
并不是首选。
修改
.delay()
根本不是为解决暂停执行除UI效果之外的脚本而设计的。解决方法是
$('input[name="q"]').change(function(eventObj) {
setTimeout(function() {
$('h3[class="r"]').append(" text");
}, 1000);
});
但正如我之前所说,setTimeout()
依赖于连接速度,不是首选,因为我必须手动平衡等待时间和响应速度(我的脚本)。
虽然这篇文章因为上帝知道而被拒绝投票 - 为什么我仍然会等待一个优雅的答案。
答案 0 :(得分:1)
可能使用jQuery 1.7+(或旧版本使用“live”或“delegate”)
$('form').on( "change", 'input[name="q"]', function(eventObj){
console.log("query changed");
$('h3').append("text");
});
如果form
是另一个元素,请相应更改。