今天是我使用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/
Run Code Online (Sandbox Code Playgroud)
前5行chrome/content/overlay.js
try{
Components.utils.import("resource://spt/mycontent/ajax.jsm");
}catch(err){
alert(err);
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
[异常... "组件返回失败代码:0x80040111(NS_ERROR_NOT_AVAILABLE)[nsIXPCComponents_Utils.import]" nsresult: "0x80040111(NS_ERROR_NOT_AVAILABLE)" 位置:"JS帧::铬://spt/content/overlay.js ::: :第2行"数据:否]
或者,如果我从chrome.manifest中删除资源别名,并在overlay.js的开头使用它
try{
Components.utils.import("chrome://spt/content/ajax.jsm");
}catch(err){
alert(err);
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
[异常... "组件返回失败代码:80070057(NS_ERROR_ILLEGAL_VALUE)[nsIXPCComponents_Utils.import]" nsresult: "80070057(NS_ERROR_ILLEGAL_VALUE)" 位置:"JS帧::铬://spt/content/overlay.js ::: :第3行"数据:否]
是的,如果你有代码应该在windows之间共享(并且不应该在加载新窗口时执行)并且不需要访问chrome,请使用JavaScript代码模块.
您可以使用以下命令导入模块:
Components.utils.import("resource://youraddon/your_module.jsm");
Run Code Online (Sandbox Code Playgroud)
只要你resource在你的设置chrome.manifest.例如,如果你添加
resource youraddon modules/
Run Code Online (Sandbox Code Playgroud)
那么你必须存储文件/path/to/your/addon/modules/your_module.jsm.
附加说明:
.jsm.你可以离开它.js.有时使用某些编辑器(以及语法突出显示等)可以更好地工作.setTimeout在模块中使用,因为它无法访问该window对象.我建议用nsITimer.| 归档时间: |
|
| 查看次数: |
1440 次 |
| 最近记录: |