Domanda

Quindi nelle estensioni di Firefox è incoraggiato per gli oggetti della tua estensione di vivere in sotto-oggetti come com.contoso.myextension. In questo modo non hai inserito alcun oggetto nello spazio dei nomi globali e le estensioni generalmente rimangono fuori dai capelli. (Almeno nella finestra comune browser.xul)

Ma da quello che ho capito Moduli di codice JavaScript (JSMS), è che mentre il modulo stesso funziona in uno spazio dei nomi separato, i simboli che esporta finirà nello spazio dei nomi globali di qualsiasi codice lo importerà. Inoltre, è impossibile che un'estensione sia "gentile" e cerca solo di costruire sotto-oggetti; Quei simboli esportati colpiranno solo qualsiasi variabile globale già esistesse. Inoltre non è possibile esportare un simbolo come com.contoso.myextension. È solo una semplice variabile globale.

Allora qual è il protocollo per giocare bene quando usi i JSM? Fai solo nomi variabili davvero lunghi e spero che non si scontrano?

È stato utile?

Soluzione

Prima di tutto, non ho visto un vero vero standard per come gestire questo. Ma possiamo sicuramente fare molto meglio di soli nomi variabili lunghi ...

Hai ragione sui moduli del codice JavaScript che vivono in un separato spazio dei nomi (per così dire), tuttavia, quando li importa, non devi importarli nello spazio dei nomi globali. Se guardi il Components.utils.import Documentazione, vedi che puoi importare su un ambito specifico. Questo è, Non devi inquinare lo spazio dei nomi globali.

Puoi raccogliere i tuoi moduli in a myExtension spazio dei nomi.

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

E avvolgerlo all'interno di una funzione di auto-esecuzione non consente a nessuna variabile di perdere nello spazio dei nomi globali, nemmeno myExtension!

(function(){
    var myExtension = {};
    Components.utils.import("resource://.../module.jsm", myExtension);
})();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top