我有一个Chrome扩展程序,我终于开始更新[已超过6mo] 我经历了将Manifest版本从1升级到2的过程。
我的扩展程序添加了一个" Poke all"按钮到Facebook,所以你不必单独戳每个人。
问题是,他们将他们的戳戳移至facebook.com/pokes,而不是在主页的框架中。
所以我的解决方法是告诉人们一旦打开/ poke就重新加载页面,这样脚本就会重新加载,然后注入" Poke All"按钮。现在,我想解决这个问题,以便当用户访问facebook.com,然后点击“#P; Pokes,"并且按钮加载,按钮自动出现。我用setTimeout设置了1.5秒,但如果有人连接速度慢,1.5秒就不够了,脚本会过早地注入按钮,导致没有按钮。
基本上,我在" Pokes"中添加一个事件监听器。链接。这就是我在运行注入代码时运行show_pokes()
添加超时的内容。
我的想法是将$(document).ready()
置于 show_pokes()
内,但这并不起作用,因为它从未在函数中继续使用。我猜$(document).ready()
仅适用于初始页面加载?所以我试过
document.addEventListener('DOMContentLoaded', function (){ /*huge chunk of code here*/ })
但这也只是挂了,从未完成过这个功能。
所以我非常肯定Facebook在你点击facebook标签时会使用AJAX请求[请参阅here],所以也许我可以设置一个事件等到AJAX结束,然后呢可以继续我的功能,并注入按钮?任何帮助将不胜感激,或者如果您需要更多代码或更多细节,请告诉我们。或者,如果您可以访问Facebook并查看它如何加载这些标签,[并确认或否认它是否使用AJAX]这也将是一个很大的帮助。
答案 0 :(得分:0)
正如杰里米所说,增加了一个反击。请注意,在AJAX循环中,返回i
将继续前进。如果你需要保留当前的i
,那么你需要将AJAX调用放在一个闭包中。
var pokes = $(".pokeMe");
var poked = 0;
var failed = 0;
for(var i = 0; i < pokes.length; i++) {
$.ajax({
url : url,
success : function(data) {
poked++;
if (poked + failed == pokes.length) {
// all actions returned
}
},
error : function(data) {
failed++;
// optional logic
}
});
}
答案 1 :(得分:0)
我不知道这对你是否有帮助,但听起来你可以使用jQuery提供的$.when().done()
。这样它将等到when()
内的所有AJAX调用完成后再继续使用你在done()
内调用的函数的其余部分。