今天是我使用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行“数据:否]
答案 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
。有时使用某些编辑器(以及语法突出显示等)可以更好地工作。setTimeout
,因为它无法访问window
对象。我建议使用nsITimer
。