Google 分析:dataLayer.push 不使用变量数组?

Google analytics: dataLayer.push not working with array of variables?

我想知道为什么 gtag.js 在推送到 dataLayer 变量数组而不是 'arguments' 时不起作用?这是一些代码示例:

window.dataLayer = window.dataLayer || []

function gtag(first: any, second: any) {
    window.dataLayer.push([first, second])
}

gtag('js', new Date())
gtag('config', trackingCode)

这仅在我将“[first, second]”替换为 'arguments'

时有效

我们不知道你试图通过覆盖 gtag 函数来实现什么,所以我们无法回答关于 "works" 和什么的具体问题没有。

可以说的是:arguments is an Object and GTM expects an object from dataLayer.push,因此这遵循了预期的设计(而 [first, second] 是一个数组,因此不是)。

请注意 push 调用本身 "works"

但是您将无法通过 GTM 读取该数据,如上所述,GTM.push 需要传递对象。

如果你想以完全免费的方式使用数据层,你可以使用GTM数据层助手:
https://github.com/google/data-layer-helper

这确实通过 Meta commands:

支持数组语法
dataLayer.push(['abc.push', 4, 5, 6]);

但是默认情况下 GTM 不支持读取此数据(GTM 再次需要一个对象,因此它可以根据对象属性提取值),因此要读取该数据通过 GTM,您需要在 GTM 标签和变量中使用 dataLayer 助手。

所以,最后,这个版本的代码对我来说工作正常,没有 linter 错误:

window.dataLayer = window.dataLayer || []

function gtag(..._args: unknown[]) {
    window.dataLayer.push(arguments)
}

gtag('js', new Date())
gtag('config', trackingCode)