Pregunta

Tengo un complemento que cada 5 minuetos o así comprueba un canal RSS para una nueva entrada, y si hay uno, se muestra una alerta (). El problema es que tengo miedo de que si el usuario abre varias ventanas, que cuando hay un mensaje nuevo a millones de alerta pop-up diciendo lo mismo. ¿Hay alguna forma de tener sólo un "cerebro" funcionando a la vez?

Gracias de antemano!

¿Fue útil?

Solución

Busque algo que se llama "Javascript módulos de código compartido" o JSMS.

documentos primarios son aquí:

https://developer.mozilla.org/En/Using_JavaScript_code_modules

Cada archivo .js en el complemento que necesita memoria compartida se abrirá con la siguiente línea:

Components.utils.import("resource://xxxxxxxx/modules/[yourFilenameHere].jsm", com.myFirefoxAddon.shared);

La línea anterior abre [yourFilenameHere] .jsm y carga sus exportados (ver abajo) funciones y variables en el objeto com.myFirefoxAddon.shared. Cada instancia de ese objeto cargado apuntará a la misma instancia en la memoria.

Tenga en cuenta que si quieren tener alguna esperanza de que un Agregado por lo que es pasado moderación, tendrá que escribir todo el código en un com.myFirefoxAddon. * Tipo de objeto como los matones en AMO impiden la aprobación de complementos que no lo hacen Respetar el espacio de nombres global

La mayor advertencia para JSM es que se necesita para exportar manualmente cada función que desea que esté disponible para el resto de su código ... desde JS no soporta cosas de tipo público / privado esto me parece una especie de apoyo "público" hombre pobre ... en cualquier caso, tendrá que crear una matriz EXPORTED_SYMBOLS en algún lugar de su archivo y el nombre JSM a cabo cada función u objeto que desea exportar, por ejemplo:

var EXPORTED_SYMBOLS = [
    /* CONSTANTS */
    "SERVER_DEBUG",
    "SERVER_RELEASE",

    "LIST_COUNTRIES",
    "LIST_TERRITORIES_NOEX",

    /* GLOBAL VARIABLES */
    /* note: primitive type variables need to be stored in the globals object */
    "urlTable",
    "globals",

    /* INTERFACES */
    "iStrSet",

    /* FUNCTIONS */
    "globalStartup",

    /* OBJECTS */
    "thinger",
    "myObject"

]

Otros consejos

[editado] Los módulos no son la solución adecuada a este problema, ya que el código todavía se importará en cada ventana y el que sea oyentes / temporizadores de configurar se ejecutará en todas las ventanas. usted debe tener cuidado con el uso de módulos para esto - todos los temporizadores / devoluciones de llamada se deben configurar en el módulo de código (no sólo con el objeto de observación definido en el módulo) y no se debe utilizar cualquier referencia a la ventana en el módulo.

La forma correcta de hacerlo es yo preferiría para escribir un componente XPCOM (en JS). Es algo complicado, sí y no tener un enlace a mano explicar cómo hacerlo. Una cosa: su aplicación utilizando XPCOMUtils es más fácil, la documentación más antigua lanzará una gran cantidad de código repetitivo en usted

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