我想在我的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。
知道如何让它发挥作用吗?
答案 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并不熟悉,知道是否有更好的方法可以做到这一点,但这应该有效。