Ho un widget JavaScript (un pezzo di codice JS e HTML incorporato) incorporato in altri siti. Cosa devo fare per assicurarmi che i nomi delle variabili non entrino in conflitto con le variabili della pagina di hosting?Come evitare conflitti di nome nei widget JavaScript
Vorrei questo widget per essere "inline", cioè sulla stessa pagina come pagina di hosting, non in un iframe, qual è il modo migliore per evitare di nomi scontri con la pagina di hosting o di scontri con altri widget?
Nome scontri possono avvenire in diversi modi:
- JavaScript nomi delle variabili
- JavaScript nomi delle funzioni
- elementi DOM identificatori nomi delle classi CSS
- forse di più ...
Posso pensare a diversi modi per oid scontri sul nome, ma mi chiedevo se ci fosse una best practice o altre raccomandazioni generali. Quindi ecco il mio 2c:
- Basta usare nomi lunghi e cercare di essere univoci. È brutto e non a prova di tutto, ma è semplice nel concetto.
- Utilizzare un iframe. Ma come detto, non voglio usare un iframe per diversi motivi. Voglio che il widget erediti gli attributi di stile dalla pagina (come il carattere predefinito e il colore di sfondo) e, soprattutto, non so quanto sarà grande il widget. Dipende dai dati in tempo reale e può essere di qualsiasi dimensione.
- Utilizzare funzioni anonime per una migliore visibilità, ad es. (function() {my code here})(). Questa soluzione, sebbene elegante, non funziona ancora per me b/c, risolve solo il nome JS in conflitto ma non quelli DOM o nomi di classi CSS e in secondo luogo, utilizzo anche jsonp per il quale devo fornire una funzione di callback nome, che alla fine deve essere incluso nell'ambito globale, quindi non può essere nidificato nell'ambito della funzione anonima.
- Creare un meccanismo di spazio dei nomi in JavaScript che fornirà univocità delle variabili e della funzione JS. Qualcosa della finestra di stile ['my_app'] [nome_variabile] o finestra ['mia_app'] nome_funzione. Anche questo è un po 'brutto, ma almeno ho il controllo sullo spazio dei nomi e posso generare spazi di nomi univoci.