从多个XUL文件访问JavaScript

从多个XUL文件访问JavaScript,javascript,firefox-addon,xul,Javascript,Firefox Addon,Xul,这是关于Firefox扩展的: 我有一个XUL浏览器覆盖,其中包括我的所有Java脚本。最终,javascript函数会触发xul页面的加载。此页面包含一个按钮,此按钮由触发页面加载的同一javascript操作(即动态设置按钮的oncommand属性,以便它执行另一个javascript函数) 问题是,当点击按钮时,它会给我错误。 我的javascript对象(名称空间、函数等)未定义。但是我不能在xul页面中再次包含所有Java脚本,因为我需要某种形式的全局对象 即使我将按钮设置为执行一个与

这是关于Firefox扩展的:

我有一个XUL浏览器覆盖,其中包括我的所有Java脚本。最终,javascript函数会触发xul页面的加载。此页面包含一个按钮,此按钮由触发页面加载的同一javascript操作(即动态设置按钮的oncommand属性,以便它执行另一个javascript函数)

问题是,当点击按钮时,它会给我错误。 我的javascript对象(名称空间、函数等)未定义。但是我不能在xul页面中再次包含所有Java脚本,因为我需要某种形式的全局对象

即使我将按钮设置为执行一个与我自己的代码无关的更简单的命令(即gBrowser.loadURI(…),它也表示gBrowser未定义

如何使用此按钮调用javascript函数?

//

将gBrowser更改为Services.wm.getMostRecentWindow('navigator:browser').gBrowser


另一个选项是创建一个JSM文件,然后在加载时将EventListener添加到此页面。创建一个JSM文件。参见示例

太棒了,非常感谢。服务。wm。。。这个把戏不起作用,它甚至说服务是未定义的。但是你的JSM想法很好。我在这里读到:。。。将我的名称空间设置js重构为jsm模块并将其导入每个xul文件就足够了。听众不需要冷静的人。服务不存在,因为您需要像这样导入服务
Cu.import('resource://gre/modules/Services.jsm');
Cu
const{classes:Cc,interfaces:Ci,utils:Cu}=Components这只是供参考,jsm模块远远优于此模块,因为它只获得了最新的窗口