Как передать аргумент в модуль Javascript?
Я хочу использовать Javascript Module (JSM) в одном окне моего приложения Xul, чтобы я мог загружать ресурс по мере необходимости.
Но мне нужно передать окно JSM, и я не знаю, как это сделать. Следует моей попытке:
В моем resource.jsm:
var EXPORTED_SYMBOLS = ["hello"];
function hello(win) {
win.alert("ALERT FROM JSM!");
}
звоню в мое окно с:
Components.utils.import("resource://module/resource.jsm");
hello(window);
но я получаю:
победа не определена
в ресурсе.jsm.
Есть идеи, как заставить это работать?
1 ответ
Это может вызвать проблемы, которые вы назвали параметр для вашего 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, чтобы знать, есть ли лучший способ сделать это, но это должно работать.