Domanda

Voglio utilizzare un Modulo Javascript (JSM) in una singola finestra della mia applicazione Xul, così posso caricare la risorsa quando ne ho bisogno.

Ma devo passare la finestra a JSM e non so come farlo.Segue il mio tentativo:

Nel mio resource.jsm :

var EXPORTED_SYMBOLS = ["hello"];

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

chiamando nella mia finestra con:

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

ma ottengo:

la vittoria non è definita

in resource.jsm.

Qualche idea su come farlo funzionare?

È stato utile?

Soluzione

È possibile che il nome del parametro per la funzione hello sia window potrebbe causare problemi.Sebbene window non sia una parola riservata, la maggior parte degli ambienti browser la tratta come una sorta di costante non assegnabile.Prova:

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

nel tuo modulo e quindi invocalo con hello(window), hello(document.window) o hello(this)


Dopo aver letto la documentazione del modulo Javascript, sembra che dovrai creare un oggetto all'interno del modulo e quindi modificarne la proprietà per riferimento.Quindi nel tuo JSM:

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

params = {
  win: this
};

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

Quindi dovresti invocare assegnando prima la finestra a quel parametro e poi chiamando la funzione:

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

Nota: non ho abbastanza familiarità con i JSM per sapere se esiste un modo migliore per farlo, ma dovrebbe funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top