2017-09-05 1 views
0

Nous fournissons à nos clients, propriétaires de sites de commerce électronique, un module JS qu'ils peuvent intégrer dans leur site Web. C'est en gros un <script src=...> qu'ils mettent dans leur HTML qui charge notre JavaScript et montre notre interface utilisateur à la caisse, similaire à this.Évitez les conflits globaux avec Google Analytics dans le module JS intégrable

Maintenant que je suis chargement module de Google Analytics indépendamment (et selon their docs):

<script> 
(function(i,s,o,g,r,a,m{i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 

// ... 
</script> 

Je risque un conflit avec propre module Google Analytics du site d'hébergement.

Même si je suivez les instructions: renaming the ga object

<script> 
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
})(window,document,'script','//www.google-analytics.com/analytics.js','analytics'); 
</script> 

(noter le changement 'analytics')

Il est toujours risqué, parce que cela dépend du bit i['GoogleAnalyticsObject']=r, ce qui est techniquement window['GoogleAnalyticsObject']=customGlobalName. Lorsque le script analytics.js se charge, il recherche window['GoogleAnalyticsObject'] pour le nom global et l'utilise. Mais alors cela signifie que je remplacerais la valeur window['GoogleAnalyticsObject'] du site d'hébergement, même s'il est par défaut ga.

j'ai vu que pour leur , ils permettent une meilleure façon de renaming the gtag object, mais il est encore au stade alpha :(.

Toute pensée?

+0

Non, je ne comprends pas quel est le problème. Pourquoi appelez-vous vos variables comme les googles? Si vous enveloppez vos js dans des fermetures appropriées, les chances d'un conflit me semblent assez minimes. Fondamentalement, je ne comprends pas pourquoi c'est un problème ou pourquoi vous devez renommer l'objet 'ga' – Liam

+2

@Liam, il craint que l'inclusion de l'extrait GA une deuxième fois écrase l'objet ga existant et réinitialise ainsi ses options de configuration (le suivi des clients sera donc perturbé). Ce n'est pas vraiment un problème, puisque Google a écrit le code de sorte que vous pouvez avoir plusieurs trackers, et qu'il abandonne les tentatives d'exécuter l'extrait une seconde fois, mais c'est une préoccupation valable. –

+0

Oui, j'ai compris cela à partir de votre réponse. Merci de clarifier quand même @EikePierstorff – Liam

Répondre

2

Il est pas nécessaire d'avoir plusieurs objets séparés ga (changement de nom est tout à fait possible dans le cas où le nom de ga est prise par un autre script) puisque vous pouvez créer des instances distinctes de l'objet de suivi en utilisant un nom de suivi:

ga('create', 'UA-XXXXX-Y', 'auto', 'embeddableJSmoduleTracker'); 

et préfixer alors tous vos appels avec e e nom respectif

ga('embeddableJSmoduleTracker.set','userId','abcde'); 
ga('embeddableJSmoduleTracker.send', 'pageview'); 

Le nom tracker veille à ce que toutes les instances tracker ont leur propre configuration (assurez-vous de ne pas oublier le préfixe du nom ou vous écrire au suivi par défaut).

Pour minimiser les interférences, vous pouvez également utiliser un custom cookie name (doit être défini lors de la création du traqueur).