在Chrome扩展程序中运行代码之前,如何等待Twitter趋势加载?

时间:2012-06-11 03:19:09

标签: javascript jquery twitter google-chrome-extension

我正在尝试为Twitter编写Chrome扩展程序,并希望稍微修改页面的布局。我已经尝试了很多东西并且用Google搜索,但无济于事。

我想在趋势和页脚之间添加一个div。但是,Twitter似乎使用ajax生成这些元素,因此当代码运行时它们不存在,即使在$(document).ready函数中也是如此。

我使用它的唯一方法是将我的代码放入setTimeout函数1-2秒。这似乎是一个相当不可靠的解决方案,所以我非常感谢这个问题的任何帮助。

提前致谢!

2 个答案:

答案 0 :(得分:2)

执行此操作的方法是创建背景页面,然后使用chrome.extension.getBackgroundPage().调用它  完成ajax请求后,您可以调整弹出页面。如果你必须将参数发送到后台页面,那么你必须将监听器添加到后台页面,如下所示:

================
chrome.extension.sendRequest({greeting: "hello"}, function(response) {
  console.log(response.farewell);
});


===============
chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
          sendResponse({farewell: "goodbye"});
  });

有关消息传递的更多信息,请访问:Message passing

如果你真的不想这么做,你可以通过将参数设置为false来同步调用ajax请求。

xmlhttp.open("GET","url",false);

然而,这不是一个好习惯,我会强烈反对。希望这可以解决你的问题!

答案 1 :(得分:1)

在每个AJAX请求之后检查是否存在某些DOM元素并不比使用setTimeout每1-2秒检查一次相同的事情要好得多(正如您所做的那样)。

更好的方法是使用DOMNodeInserted事件。如果你正确设置它(将它添加到正确的元素),只要你等待的元素被插入DOM,你就会收到通知。事件发生后,请记住删除它(removeEventListener),因为performance issues已知突变事件。