我们为电子商务网站所有者的客户提供可以嵌入其网站的JS模块。它基本上是<script src=...>
,他们在HTML中加载我们的JavaScript并在结帐时显示我们的用户界面,类似于this。
现在,因为我正在独立加载Google Analytics模块(根据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>
我冒着与托管网站自己的Google Analytics模块发生冲突的风险。
即使我按照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>
(请注意'analytics'
更改)
它仍有风险,因为它取决于i['GoogleAnalyticsObject']=r
位,技术上window['GoogleAnalyticsObject']=customGlobalName
。加载analytics.js脚本时,它会在window['GoogleAnalyticsObject']
中查找全局名称并使用它。但这意味着我会覆盖托管网站的window['GoogleAnalyticsObject']
值,即使它默认为ga
。
我看到他们的gtag.js,他们允许更好的方式renaming the gtag object,但它仍处于alpha阶段:(。
有什么想法吗?
答案 0 :(得分:2)
没有必要拥有多个单独的ga对象(如果ga名称由其他脚本占用,则可以重命名),因为您可以使用跟踪器名称创建跟踪器对象的单独实例:
ga('create', 'UA-XXXXX-Y', 'auto', 'embeddableJSmoduleTracker');
然后使用相应名称
为所有通话添加前缀ga('embeddableJSmoduleTracker.set','userId','abcde');
ga('embeddableJSmoduleTracker.send', 'pageview');
跟踪器名称确保所有跟踪器实例都有自己的配置(只需确保您不会忘记名称前缀或者您将写入默认跟踪器)。
为了尽量减少干扰,您还可以考虑使用custom cookie name(必须在创建跟踪器时设置)。