Frage

ich ein Addon haben, dass alle 5 Menuette oder so prüft ein RSS-Feed für einen neuen Beitrag, und wenn es einen gibt, zeigt es eine Warnung (). Das Problem ist, ich habe Angst, dass, wenn der Benutzer mehrere Fenster öffnet sich, dass, wenn es gibt einen neuen Beitrag ein Millionen-Benachrichtigungen Popup wird dasselbe zu sagen. Gibt es trotzdem nur ein „Gehirn“ läuft in einer Zeit zu haben?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Sehen Sie etwas namens "Javascript-Code-Module geteilt" oder JSMS.

Primary docs sind hier:

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

Jede Js-Datei in Ihrem Add-on, dass der Bedarf gemeinsam genutzten Speicher mit der folgenden Zeile geöffnet:

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

Die obige Zeile öffnet [yourFilenameHere] .jsm und lädt seine exportiert (siehe unten) Funktionen und Variablen in die com.myFirefoxAddon.shared Objekt. Jede Instanz des Objekts geladen derselben Instanz im Speicher verweisen.

Beachten Sie, dass, wenn Sie irgendeine Hoffnung, die Sie haben wollen addon es Vergangenheit Mäßigung zu machen, müssen Sie den gesamten Code in einem com.myFirefoxAddon schreiben. * Typ-Objekt als goons bei AMO verhindern Genehmigung von Add-Ons, die nicht tun Respektieren Sie den globalen Namensraum

Der größte Nachteil für JSM ist, dass Sie jede Funktion manuell exportieren, dass Sie den Rest des Codes verfügbar sein sollen ... da JS nicht öffentlich / privat Art Sachen mich diese Streiks als eine Art unterstützt von arme-Leute-„public“ Unterstützung ... in jedem Fall benötigen Sie eine Exported_Symbols Array irgendwo in Ihrer JSM-Datei erstellen und jede Funktion oder Objektnamen aus, die Sie exportieren möchten, wie folgt aus:

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"

]

Andere Tipps

[editierten] Module sind nicht die richtige Lösung für dieses Problem, da der Code immer noch in jedes Fenster importiert werden und das, was die Zuhörer / Timer Sie in jedem Fenster einrichten ausgeführt werden soll. Sie sollten bei der Verwendung von Modulen für diesen vorsichtig sein Modul.

Der richtige Weg, dies zu tun ist Ich würde es vorziehen eine XPCOM Komponente (in JS) zu schreiben. Es ist etwas kompliziert, ja und ich habe nicht eine praktische Verbindung zu erklären, wie es zu tun. Eine Sache: Umsetzung es XPCOMUtils unter Verwendung einfacher, ältere Dokumentation wird eine Menge Standardcode auf Sie werfen

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top