我想知道为什么gtag.js将变量而不是“参数”推向数据层数阵列时不起作用?这是一些代码示例:
window.dataLayer = window.dataLayer || []
function gtag(first: any, second: any) {
window.dataLayer.push([first, second])
}
gtag('js', new Date())
gtag('config', trackingCode)
当我用'gronguments'
,最后,此版本的代码对我来说很好,没有衬里错误:
window.dataLayer = window.dataLayer || []
function gtag(..._args: unknown[]) {
window.dataLayer.push(arguments)
}
gtag('js', new Date())
gtag('config', trackingCode)
我们不知道您要通过覆盖
gtag
函数来实现什么,因此我们无法回答有关什么和没有什么的特定问题。可以说的是:
"works"
是一个对象,
gtm期望从
arguments
中进行一个对象,因此为什么要遵循预期的设计(而dataLayer.push
是一个数组,因此不是)。
注意,
[first, second]
呼唤自己“ works”:
如果您想以免费的方式使用Datalayer,则可以使用GTM DataLayer助手: https://github.com/google/data-layer-helper
这确实通过默认情况下,默认情况下不支持读取此数据(GTM再次期望一个对象,因此可以根据对象属性提取值),因此要通过GTM读取该数据,您需要在GTM标签和变量中使用DataLayer助手。 this是,在某些情况下,GTM检查了
.push
中的“对象”是该代码在官方中支持的一个实例。
dataLayer.push(['abc.push', 4, 5, 6]);
您可能想在页面顶部声明这样的内容。
dataLayer
Arguments
,否则,您只需将对象直接推入
https://www.googletagmanager.com/gtag/js?id=...
:
function lb(a){return!!a&&(Object.prototype.toString.call(a)==="[object Arguments]"||Object.prototype.hasOwnProperty.call(a,"callee"))}
这种方法似乎确实有效