Wie übergebe ich ein Argument an ein Javascript-Modul?
-
29-10-2019 - |
Frage
Ich möchte ein Javascript-Modul (JSM) in einem einzelnen Fenster meiner Xul-Anwendung verwenden, damit ich die Ressource nach Bedarf laden kann.
Aber ich muss das Fenster an das JSM übergeben, und ich weiß nicht, wie es geht.Folgt meinem Versuch:
In meiner resource.jsm :
var EXPORTED_SYMBOLS = ["hello"];
function hello(win) {
win.alert("ALERT FROM JSM!");
}
Aufruf in meinem Fenster mit:
Components.utils.import("resource://module/resource.jsm");
hello(window);
aber ich bekomme:
win ist undefiniert
in der resource.jsm.
Irgendeine Idee, wie es funktioniert?
Lösung
Es kann zu Problemen führen, dass Sie den Parameter für Ihre hello
-Funktion als window
bezeichnet haben.Während Fenster kein reserviertes Wort ist, wird es in den meisten Browserumgebungen als eine nicht zuweisbare Konstante behandelt.Versuchen Sie:
function hello( obj ) {
obj.alert("ALERT FROM JSM!");
}
in Ihrem Modul und rufen Sie es dann mit hello(window)
, hello(document.window)
oder hello(this)
auf
Nachdem Sie die Dokumentation zum Javascript-Modul gelesen haben, müssen Sie anscheinend ein Objekt innerhalb des Moduls erstellen und dann seine Eigenschaft anhand der Referenz ändern.Also in Ihrem JSM:
var EXPORTED_SYMBOLS = ["params", "hello"];
params = {
win: this
};
function hello() {
params.win.alert("ALERT FROM JSM!");
}
Dann rufen Sie auf, indem Sie zuerst das Fenster diesem Parameter zuweisen und dann die Funktion aufrufen:
Components.utils.import("resource://module/resource.jsm");
params.win = window;
hello();
Hinweis: Ich bin mit JSMs nicht vertraut genug, um zu wissen, ob es einen besseren Weg gibt, dies zu tun, aber dies sollte funktionieren.