Chrome扩展程序弹出窗口和后台Ajax

5

我有一个需求,希望每隔10分钟更新一次background.html ,当我点击弹出窗口时,应立即触发background更新并在弹出窗口中显示结果。

我已经使用ajax实现了background的更新,也用ajax实现了弹出窗口触发background进行即时更新。 但是,我不知道如何在弹出窗口中显示最新结果...我该如何判断background ajax调用何时完成并在弹出窗口中显示最新结果呢?

谢谢

1个回答

13

如果你想监听后台页面的更改,有两种方法可以实现你的需求:

  1. 在你的弹出窗口中注册chrome.extension.onRequest.addListener,在后台页面中使用chrome.extension.sendRequest来更新内容。
  2. 你可以直接访问弹出窗口的DOM,从chrome.extension.getViews({ type:'popup' })获取一个实例,然后调用该DOM的方法。从弹出窗口,你也可以轻松地访问后台页面,只需使用chrome.extension.getBackgroundPage()即可。对于这两种情况,你都会得到一个DOMWindow对象。

我个人会选择第二种方法,因为你属于同一个扩展进程,不需要与注入的内容脚本通信。

var popups = chrome.extension.getViews({type: "popup"});
if (popups.length != 0) {
  var popup = popups[0];
  popup.doSomething();
}
希望这可以帮助到你。

我想执行chrome.extension.getViews(['popup']),但它给了我一个错误,说不期望数组... - khan
未捕获的错误:参数1的值无效。期望为“对象”,但实际得到的是“数组”。 - khan
你应该总是阅读文档,我没有写代码 :) http://code.google.com/chrome/extensions/extension.html#method-getViews 我已经更新了我的答案并添加了一些代码。 - Mohamed Mansour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接