Firefox addon Firefox扩展启动通知

Firefox addon Firefox扩展启动通知,firefox-addon,observer-pattern,Firefox Addon,Observer Pattern,我很难理解关于在Firefox扩展中接收启动通知的解释。上面写着要补充 category profile-after-change MyComponent @foobar/mycomponent;1 到chrome.manifest。我应该为MyComponent和foobar/MyComponent添加什么;1 我的扩展实际上是另一个扩展的插件。在它的主.js文件中,我有 MainExtension.MyPlugin = {... 然后在MainExtension对象的MyPlugin对象

我很难理解关于在Firefox扩展中接收启动通知的解释。上面写着要补充

category profile-after-change MyComponent @foobar/mycomponent;1
到chrome.manifest。我应该为
MyComponent
foobar/MyComponent添加什么;1

我的扩展实际上是另一个扩展的插件。在它的主.js文件中,我有

MainExtension.MyPlugin = {...
然后在MainExtension对象的MyPlugin对象属性中定义所有函数


我认为我应该将
MyComponent
设置为
maintension.MyPlugin
。我不确定第二部分。我也不确定我需要做什么来调用我希望在启动时调用的函数。看看其他一些扩展,我想我可能需要添加一个
observe()
方法到
maintension.MyPlugin
,当它收到更改后的
配置文件
通知时调用另一个函数,但我不确定。

我想你真正想要的是在maintension可用时得到通知。请尝试Wladimir Palant在对问题的评论中指出的

,要使用更改后的配置文件通知,您必须拥有XPCOM组件。然后,
MyComponent
是component创建的类,
@foobar/MyComponent;1
是组件的合同id。我不知道这些是什么,因为我的扩展只是覆盖了另一个定义XPCOM组件的扩展。我的扩展没有自己的XPCOM组件。

如何加载“main.js文件”?通过覆盖层中的
标记或其他方式?文档中提到了XPCOM组件,但您显然没有。在include.js中,mozIJSSubScriptLoader用于加载main.js文件,该文件定义了
maintextension.MyPlugin
,然后以
window.addEventListener('load',function(e){maintextension.MyPlugin.init();},false)结尾。我关闭了我的插件,但该插件似乎过时了,因为它在install.rdf中使用了不再受支持的“requires”。我想在更改后使用profile来替换“requires”功能。换句话说,脚本是由覆盖层(间接)加载的。我还希望修复我的插件中的一个bug,我认为这可能与()有关。Zotero可以设置为作为浏览器中的另一个窗格、单独的选项卡或应用程序选项卡加载。当Zotero在浏览器中作为窗格加载时,我的插件工作,但当它在另一个选项卡中加载时,我的插件不会覆盖其XUL(既不是通过.XUL文件,也不是通过zutilo.js中的代码)。我的插件仍然可以正常加载,因为我可以通过插件管理器访问它的首选项/功能。也许如果我的插件正确地观察到Zotero,覆盖会起作用?好吧,所以我需要让我的扩展成为XPCOM组件,以便在更改通知后获得配置文件,但也许@paa对AddonManager的建议更适合我想做的事(创建一个加载到另一个扩展上的插件)?AddonManager似乎很有希望,但是我在理解语法方面有困难。我想我想导入AddonManager,然后执行
AddonManager.addonListener()
并使用
onEnabled()
侦听器,但我不确定如何为main扩展定义此侦听器以传递到
AddonManager.addonListener()
。另外,我应该在哪里定义这个侦听器?现在,我的插件是由一个覆盖层定义的(见上面的讨论),但当我将扩展创建为XPCOM组件时,可能需要定义这个侦听器(我目前没有这样做——我只是覆盖并扩展现有的组件)。我与AddonManager玩了一会儿,并了解了如何添加侦听器。。。。但是,AddonManager似乎只允许您在启用/禁用和安装/卸载加载项时添加侦听器,而不允许在正常Firefox启动时添加侦听器。好的,我上面所说的侦听器是正确的,但我会说我找到了AddonManager.getAddonByID()对于运行某些需要安装MainExtension的代码非常有用。谢谢你的建议!