1

我想在我的 Xul 应用程序的单个窗口中使用Javascript 模块(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);

但我得到:

win 未定义

在 resource.jsm 中。

知道如何使它工作吗?

4

1 回答 1

0

hello将函数的参数命名为 可能会导致问题window。虽然 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 不够熟悉,不知道是否有更好的方法来做到这一点,但这应该可以。

于 2011-05-05T18:41:28.593 回答