1

我正在尝试为 Twitter 编写一个 Chrome 扩展程序,并且想稍微修改一下页面的布局。我已经尝试了很多东西并在谷歌上搜索,但无济于事。

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

我让它工作的唯一方法是将我的代码放在 setTimeout 函数中 1-2 秒。这似乎是一个相当不可靠的解决方案,因此我将非常感谢任何有关此问题的帮助。

提前致谢!

4

2 回答 2

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"});
  });

有关消息传递的更多信息,请参见:消息传递

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

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

然而,这不是一个好的做法,我强烈建议不要这样做。希望这能解决您的问题!

于 2012-06-11T03:33:27.877 回答
1

在每个 AJAX 请求之后检查是否有一些 DOM 元素并不比每 1-2 秒检查一次setTimeout(就像你做的那样)好多少。

更好的方法是使用DOMNodeInserted事件。如果您设置正确(将其添加到正确的元素),每当您等待的元素插入 DOM 时,您都会收到通知。事件被触发后记得删除它(removeEventListener),因为突变事件以其性能问题而闻名。

于 2012-06-11T07:12:23.563 回答