Javascript 如何将当前上下文设置为变量?(下标)

Javascript 如何将当前上下文设置为变量?(下标),javascript,firefox-addon,loading,Javascript,Firefox Addon,Loading,每次需要加载脚本时,我都必须将所有需要的变量复制到该上下文中。例如: var ctx; ctx.window = window; ctx.console = window.console; ctx.MyOwnClass1 = MyOwnClass1; ctx.MyOwnClass2 = MyOwnClass2; ctx.MyOwnClass3 = MyOwnClass3; Services.scriptloader.loadSubScript("file://" + filePath, ctx

每次需要加载脚本时,我都必须将所有需要的变量复制到该上下文中。例如:

var ctx;
ctx.window = window;
ctx.console = window.console;
ctx.MyOwnClass1 = MyOwnClass1;
ctx.MyOwnClass2 = MyOwnClass2;
ctx.MyOwnClass3 = MyOwnClass3;

Services.scriptloader.loadSubScript("file://" + filePath, ctx, "UTF-8"); 
如果我有2或3个类,这不是问题,但现在我需要上下文知道20个类。因此,我认为必须有某种方法将当前上下文设置为变量。比如:

var ctx = this.context;

你知道怎么做吗?有什么想法吗?

也许您可以尝试将context、ctx设置为this或null。loadSubscript文档确实声明它是一个可选参数

先前编辑的其他答案:

如果你有胆量,你可以尝试摆弄:

Object.keysthis或Object.getOwnPropertyNamesthis

使用Firefox的devtools:scratchpad:

这样,您就可以在全局范围内组合一个代码段来过滤感兴趣的类名,如下所示:

Object.keys(this).forEach(function(key){
    if(key.match(/^SomeNamespacedClassName/)){
        ctx[key] = this[key];
    }
});

是的,它可能很俗气,但不管怎样都有效。

也许您可以尝试将context、ctx设置为this或null。loadSubscript文档确实声明它是一个可选参数

先前编辑的其他答案:

如果你有胆量,你可以尝试摆弄:

Object.keysthis或Object.getOwnPropertyNamesthis

使用Firefox的devtools:scratchpad:

这样,您就可以在全局范围内组合一个代码段来过滤感兴趣的类名,如下所示:

Object.keys(this).forEach(function(key){
    if(key.match(/^SomeNamespacedClassName/)){
        ctx[key] = this[key];
    }
});

是的,它可能很俗气,但不管怎样都可以。

您应该使用自己的上下文作为加载脚本的JavaScript上下文的原型。如果ctx是常规对象,则可以使用:

如果ctx是沙箱,则可以使用:

窗口上的所有可用属性(包括全局函数/变量)将在ctx对象上自动可用


注意:我在这里假设window是全局对象,即定义全局变量的对象。这对于在XUL/HTML文档中运行的代码来说是正确的。但是,在沙箱中运行的代码(例如引导加载项的bootstrap.js)不会有窗口对象-在那里,您只能访问顶级代码中的全局对象。

您应该使用自己的上下文作为加载脚本的JavaScript上下文的原型。如果ctx是常规对象,则可以使用:

如果ctx是沙箱,则可以使用:

窗口上的所有可用属性(包括全局函数/变量)将在ctx对象上自动可用


注意:我在这里假设window是全局对象,即定义全局变量的对象。这对于在XUL/HTML文档中运行的代码来说是正确的。但是,在沙盒中运行的代码(例如引导加载项的bootstrap.js)不会有窗口对象-在那里,您只能访问顶级代码中的全局对象。

使用它是最好的解决方案!使用这是最好的解决方案!
var ctx = Object.create(window);
var ctx = new Components.utils.Sandbox(systemPrincipal, {sandboxPrototype: window});