Как передать аргумент в модуль 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, чтобы знать, есть ли лучший способ сделать это, но это должно работать.

Другие вопросы по тегам