如何将参数传递给Javascript模块?

时间:2011-05-05 18:11:13

标签: javascript module jsm

我想在我的Xul应用程序的单个窗口中使用Javascript Module(JSM),因此我可以根据需要加载资源。

但是,我需要将窗口传递给JSM,我不知道该怎么做。跟着我的尝试:

在我的 resource.jsm

var EXPORTED_SYMBOLS = ["hello"];

function hello(win) {
    win.alert("ALERT FROM JSM!");
}

在我的窗口中调用:

Components.utils.import("resource://module/resource.jsm");
hello(window);

但我明白了:

  

胜利未定义

在resource.jsm。

知道如何让它发挥作用吗?

1 个答案:

答案 0 :(得分:0)

可能会导致您将hello函数的参数命名为window的问题。虽然窗口不是保留字,但大多数浏览器环境将其视为不可分配的常量。尝试:

function hello( obj ) {
    obj.alert("ALERT FROM JSM!");
}

在您的模块中,然后使用hello(window)hello(document.window)hello(this)

调用它

阅读Javascript模块文档后,您似乎需要在模块中创建一个对象,然后通过引用更改它的属性。所以在你的JSM中:

var EXPORTED_SYMBOLS = ["params", "hello"];

params = {
  win: this
};

function hello() {
    params.win.alert("ALERT FROM JSM!");
}

然后通过首先将窗口分配给该参数然后调用函数来调用:

Components.utils.import("resource://module/resource.jsm");
params.win = window;
hello();

注意:我对JSM并不熟悉,知道是否有更好的方法可以做到这一点,但这应该有效。