如何将参数传递给 Javascript 模块



我想在我的Xul应用程序的单个窗口中使用Javascript模块(JSM),这样我就可以根据需要加载资源。

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

在我的资源.jsm中:

var EXPORTED_SYMBOLS = ["hello"];
function hello(win) {
    win.alert("ALERT FROM JSM!");
}

在我的窗口中打电话:

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

但我得到:

胜利是未定义的

在资源.jsm中。

知道如何让它工作吗?

可能会导致将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 不够熟悉,不知道是否有更好的方法来做到这一点,但这应该可以工作。

相关内容

  • 没有找到相关文章

最新更新