Frage

In Firefox-Erweiterungen wird es also ermutigt, dass die Objekte Ihrer Erweiterung in Unterobjekten wie com.contoso.myextension leben. Auf diese Weise haben Sie keine Objekte in den globalen Namespace gesteckt und Erweiterungen bleiben im Allgemeinen aus den Haaren des anderen. (Zumindest im Browser.xul -Fenster)

Aber soweit ich verstanden habe JavaScript -Code -Module (JSMS), Während das Modul selbst in einem separaten Namespace arbeitet, werden die Symbole, die es exportiert, in den globalen Namespace des Codes, den es importiert. Darüber hinaus ist es unmöglich, dass eine Erweiterung "nett" ist und nur versuchen, Sub-Objekte zu erstellen. Diese exportierten Symbole werden nur die bereits exportierten globalen Variablen schlagen. Außerdem können Sie ein Symbol wie com.contoso.Myextension nicht exportieren. Es ist nur eine einfache globale Variable.

Was ist das Protokoll für das Spielen bei der Verwendung von JSMS? Machen Sie einfach wirklich lange variable Namen und hoffen Sie, dass sie nicht kollidieren werden?

War es hilfreich?

Lösung

Zunächst einmal habe ich keine schwere wahre gesehen Standard für wie man damit umgeht. Aber wir können definitiv viel besser als nur lange variable Namen ...

Sie haben Recht über die JavaScript -Code -Module, die in einem separaten leben Namespace (Also zu sprechen), aber wenn Sie sie importieren, müssen Sie sie nicht in den globalen Namespace importieren. Wenn Sie sich das ansehen Components.utils.import Dokumentation sehen Sie, dass Sie in einen bestimmten Bereich importieren können. Das ist, Sie müssen den globalen Namespace überhaupt nicht verschmutzen.

Sie können Ihre Module in a sammeln myExtension Namespace.

var myExtension = {};
Components.utils.import("resource://.../module.jsm", myExtension);

Und das Wickeln in eine selbstversorgende Funktion lässt keine Variablen in den globalen Namespace eindringen, nicht einmal myExtension!

(function(){
    var myExtension = {};
    Components.utils.import("resource://.../module.jsm", myExtension);
})();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top