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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top