Question

Je veux utiliser un Module JavaScript (JSM) Dans une seule fenêtre de mon application XUL, je peux donc charger la ressource car j'en ai besoin.

Mais, j'ai besoin de passer la fenêtre au JSM, et je ne sais pas comment le faire. Suit ma tentative:

Dans mon ressource.jsm:

var EXPORTED_SYMBOLS = ["hello"];

function hello(win) {
    win.alert("ALERT FROM JSM!");
}

Appeler dans ma fenêtre avec:

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

Mais je comprends:

la victoire n'est pas définie

Dans la ressource.jsm.

Une idée comment le faire fonctionner?

Était-ce utile?

La solution

Cela pourrait causer des problèmes que vous avez nommés le paramètre pour votre hello fonction à être window. Bien que Window ne soit pas un mot réservé, la plupart des environnements de navigateur le traitent comme une sorte de constante inattribuable. Essayer:

function hello( obj ) {
    obj.alert("ALERT FROM JSM!");
}

dans votre module puis l'invoque avec hello(window), hello(document.window), ou hello(this)


Après avoir lu la documentation du module JavaScript, il semble que vous devrez créer un objet dans le module, puis modifier sa propriété par référence. Donc dans votre JSM:

var EXPORTED_SYMBOLS = ["params", "hello"];

params = {
  win: this
};

function hello() {
    params.win.alert("ALERT FROM JSM!");
}

Ensuite, vous invoqueriez d'abord en affectant la fenêtre à ce paramètre, puis en appelant la fonction:

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

Remarque: Je ne connais pas assez JSMS pour savoir s'il existe une meilleure façon de le faire, mais cela devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top