如何在Firefox扩展中生成代码在计时器上执行

时间:2011-01-07 20:20:25

标签: firefox-addon

今天是我使用firefox扩展程序的第一天。

基本上我正在制作一个扩展程序,用于在内部网络上检查Web服务器是否有新通知。

我使用mozilla页面上的向导进行骨架扩展,然后主要使用一些ajax代码编辑overlay.js。

我正在使用“load”事件监听器将setTimeout调用到我的ajax调用,然后使用setTimeouts循环。

问题似乎是在每个新浏览器窗口上执行“load”事件侦听器。我只想要一个全局计时器来解决这个问题。

有什么想法吗?

更新

我发现了这个:https://developer.mozilla.org/en/JavaScript_code_modules/Using 这似乎是我想要的。问题是我无法弄清楚如何导入jsm文件。什么是目录结构?

更新

尝试时:

chrome.manifest用于

content   spt                 chrome/content/
skin      spt   classic/1.0   chrome/skin/
locale    spt   en-US         chrome/locale/en-US/


overlay   chrome://browser/content/browser.xul   chrome://spt/content/ff-overlay.xul
style chrome://global/content/customizeToolbar.xul chrome://spt/skin/overlay.css


resource mycontent chrome/content/

前5行chrome / content / overlay.js

try{
    Components.utils.import("resource://spt/mycontent/ajax.jsm");
}catch(err){
    alert(err);
}

我收到此错误:

[Exception ...“组件返回失败代码:0x80040111(NS_ERROR_NOT_AVAILABLE)[nsIXPCComponents_Utils.import]”nsresult:“0x80040111(NS_ERROR_NOT_AVAILABLE)”location:“JS frame :: chrome://spt/content/overlay.js :: ::第2行“数据:否]

或者当我从chrome.manifest中删除资源别名并在overlay.js的开头使用它时

try{
    Components.utils.import("chrome://spt/content/ajax.jsm");
}catch(err){
    alert(err);
}

我收到此错误:

[Exception ...“组件返回失败代码:0x80070057(NS_ERROR_ILLEGAL_VALUE)[nsIXPCComponents_Utils.import]”nsresult:“0x80070057(NS_ERROR_ILLEGAL_VALUE)”location:“JS frame :: chrome://spt/content/overlay.js :: ::第3行“数据:否]

1 个答案:

答案 0 :(得分:5)

是的,如果你有代码应该在windows之间共享(并且在加载新窗口时不应该执行)并且不需要访问chrome,请使用JavaScript code modules

您可以使用以下方式导入模块:

Components.utils.import("resource://youraddon/your_module.jsm");

只要您在chrome.manifest中设置resource即可。例如。如果你添加

resource youraddon modules/

然后您必须将文件存储在/path/to/your/addon/modules/your_module.jsm

补充说明:

  • 代码模块不必具有文件扩展名.jsm。你可以保留.js。有时使用某些编辑器(以及语法突出显示等)可以更好地工作。
  • Afaik您无法在模块中使用setTimeout,因为它无法访问window对象。我建议使用nsITimer