Pergunta

Desejo usar um Módulo Javascript (JSM) em uma única janela do meu aplicativo Xul, para que eu possa carregar o recurso conforme necessário.

Mas, preciso passar a janela para o JSM, e não sei como fazer.Segue minha tentativa:

Em meu resource.jsm :

var EXPORTED_SYMBOLS = ["hello"];

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

chamando na minha janela com:

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

mas eu entendo:

a vitória é indefinida

no resource.jsm.

Alguma ideia de como fazer funcionar?

Foi útil?

Solução

Pode estar causando problemas o fato de você ter nomeado o parâmetro da função hello como window.Embora janela não seja uma palavra reservada, a maioria dos ambientes de navegador a trata como uma espécie de constante não atribuível.Experimente:

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

em seu módulo e, em seguida, invoque-o com hello(window), hello(document.window) ou hello(this)


Depois de ler a documentação do módulo Javascript, parece que você precisará criar um objeto dentro do módulo e, em seguida, alterar sua propriedade por referência.Então, em seu JSM:

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

params = {
  win: this
};

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

Então, você chamaria atribuindo primeiro a janela a esse parâmetro e, em seguida, chamando a função:

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

Observação: não estou familiarizado o suficiente com JSMs para saber se há uma maneira melhor de fazer isso, mas deve funcionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top