Pregunta

Quiero usar un Módulo Javascript (JSM) en una sola ventana de mi aplicación Xul, para que pueda cargar el recurso cuando lo necesite.

Pero necesito pasar la ventana al JSM y no sé cómo hacerlo.Sigue mi intento:

En mi resource.jsm :

var EXPORTED_SYMBOLS = ["hello"];

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

llamando a mi ventana con:

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

pero obtengo:

la victoria no está definida

en resource.jsm.

¿Alguna idea de cómo hacerlo funcionar?

¿Fue útil?

Solución

Podría estar causando problemas si nombró el parámetro de su función hello como window.Si bien ventana no es una palabra reservada, la mayoría de los entornos de navegador la tratan como una especie de constante no asignable.Prueba:

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

en su módulo y luego invocarlo con hello(window), hello(document.window) o hello(this)


Después de leer la documentación del módulo Javascript, parece que necesitará crear un objeto dentro del módulo y luego cambiar su propiedad por referencia.Entonces en su JSM:

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

params = {
  win: this
};

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

Luego, lo invocarías asignando primero la ventana a ese parámetro y luego llamando a la función:

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

Nota: no estoy lo suficientemente familiarizado con los JSM para saber si hay una mejor manera de hacer esto, pero debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top