Google analytics 当外部JS库也试图初始化Google Analytics时,如何安全地初始化Google Analytics?

Google analytics 当外部JS库也试图初始化Google Analytics时,如何安全地初始化Google Analytics?,google-analytics,Google Analytics,我们正在使用谷歌标签管理器部署谷歌分析。这在任何地方都非常有效,除了运行特定供应商JS的地方 该供应商自行启动google analytics,创建自己的跟踪器,然后(大概)跟踪正在创建的小部件上的交互 问题是有一个竞赛条件,似乎哪个脚本初始化了第一个“胜利” 据此: 不支持将GA初始化到不同的名称空间中;但是所有关于创建多个跟踪器的引用都是基于一个控制方的基本假设 当可能有或可能没有另一个JS库尝试相同的操作时,如何安全地引导GA?analytics.JS支持通过窗口重命名全局GA()命令队列

我们正在使用谷歌标签管理器部署谷歌分析。这在任何地方都非常有效,除了运行特定供应商JS的地方

该供应商自行启动google analytics,创建自己的跟踪器,然后(大概)跟踪正在创建的小部件上的交互

问题是有一个竞赛条件,似乎哪个脚本初始化了第一个“胜利”

据此:

不支持将GA初始化到不同的名称空间中;但是所有关于创建多个跟踪器的引用都是基于一个控制方的基本假设


当可能有或可能没有另一个JS库尝试相同的操作时,如何安全地引导GA?

analytics.JS支持通过
窗口重命名全局
GA()
命令队列。GoogleAnalyticsObject
。换句话说,当analytics.js下载时,它会查看是否在
window.GoogleAnalyticsObject
上设置了一个值,如果找到了一个值,它会假定name是全局命令队列函数的名称。如果找不到,则采用默认名称
ga

加载到页面上的第三方插件、小部件或任何其他代码应尊重您(主机)分配给
window.GoogleAnalyticsObject
的值。他们不应该自己修改它

如果您是第三方插件作者,您应该检查主机页是否重命名了命令队列函数

下面是一个示例,它获取对主机页为
ga()
命令队列设置的任何值的引用:

var gaReference = window[window.GoogleAnalyticsObject || 'ga'];
一旦你有了参考资料,你就可以像平常一样使用它;但是,您不应使用,因为这很可能是主机页正在使用的:

gaReference('create', 'UA-XXXXX-Y', 'auto', {name: 'someUniquePluginName'});
gaReference('someUniquePluginName.send', 'pageview');

analytics.js支持通过
窗口重命名全局
ga()
命令队列。GoogleAnalyticsObject
。换句话说,当analytics.js下载时,它会查看是否在
window.GoogleAnalyticsObject
上设置了一个值,如果找到了一个值,它会假定name是全局命令队列函数的名称。如果找不到,则采用默认名称
ga

加载到页面上的第三方插件、小部件或任何其他代码应尊重您(主机)分配给
window.GoogleAnalyticsObject
的值。他们不应该自己修改它

如果您是第三方插件作者,您应该检查主机页是否重命名了命令队列函数

下面是一个示例,它获取对主机页为
ga()
命令队列设置的任何值的引用:

var gaReference = window[window.GoogleAnalyticsObject || 'ga'];
一旦你有了参考资料,你就可以像平常一样使用它;但是,您不应使用,因为这很可能是主机页正在使用的:

gaReference('create', 'UA-XXXXX-Y', 'auto', {name: 'someUniquePluginName'});
gaReference('someUniquePluginName.send', 'pageview');

小部件代码是使用
ga
名称,还是使用自定义名称?它们使用自定义名称。它们不应该这样做。如果你和他们有关系,我会主动告诉他们不要这样做。第三方代码不应干扰主机站点的Google Analytics实现。小部件代码是使用
ga
名称,还是使用自定义名称?他们使用自定义名称。他们不应该这样做。如果你和他们有关系,我会主动告诉他们不要这样做。第三方代码不应干扰宿主站点的Google Analytics实现。