Pergunta

Eu tenho um addon que cada 5 minuetos ou mais cheques um feed RSS para um novo post, e se houver um, ele exibirá um alerta (). O problema é que eu tenho medo de que, se o usuário abrir várias janelas, que, quando há uma nova mensagem de milhões de alertas irá aparecer dizendo a mesma coisa. Existe uma maneira de ter apenas um "cérebro" em execução ao mesmo tempo?

Agradecemos antecipadamente!

Foi útil?

Solução

Procure algo chamado "Javascript compartilhada módulos de código" ou JSMS.

docs primárias está aqui:

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

Cada arquivo js em sua addon que as necessidades de memória compartilhada será aberta com a seguinte linha:

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

A linha de cima abre [yourFilenameHere] .jsm e cargas suas fortes <> exportados fortes (ver abaixo) funções e variáveis ??no objeto com.myFirefoxAddon.shared. Cada instância do objeto carregado irá apontar para a mesma instância na memória.

Note que se você quiser ter alguma esperança de que você addon tornando-se passado moderação, você terá que escrever todo o seu código em um com.myFirefoxAddon. * Tipo de objeto que os capangas no AMO estão impedindo a aprovação de addons que não fazer Respeite global Namespace

A maior ressalva para JSM é que você precisa para exportar manualmente cada função que deseja estar disponível para o resto do seu código ... desde JS não suporta coisas tipo de público / privado este greves me como uma espécie de apoio "público" do pobre homem ... em qualquer caso, você terá de criar um lugar variedade EXPORTED_SYMBOLS em seu arquivo de JSM e nomear a cada função ou objeto que você deseja exportar, como este:

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"

]

Outras dicas

[editado] Módulos não são a solução certa para este problema, uma vez que o código ainda será importado para todas as janelas e o que quer ouvintes / temporizadores você configurar será executado em cada janela. você deve ter cuidado com o uso de módulos para isso - todos os temporizadores / retornos de chamada deve ser configurado no código do módulo (não apenas usando o objeto observador definido no módulo) e você não deve usar quaisquer referências à janela no módulo.

A maneira certa de fazer isso é Eu preferiria para escrever um componente XPCOM (em JS). É um pouco complicado, sim e eu não tenho um link útil explicando como fazê-lo. Uma coisa: implementá-lo usando XPCOMUtils é mais fácil, a documentação mais velho vai jogar um monte de código clichê em você

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