当 Google 建议将 dataLayer 代码放在源代码的高处时,如何解决代码中有条件的 dataLayer 推送的需求?

How do I resolve the need for a conditional dataLayer push within code, when Google recommends that dataLayer code be placed high in the source code?

我在表单提交时触发了一个 dataLayer 变量。此表单提交的 javascript 代码不在源代码的顶部。

Google recommends that we declare the dataLayer high in the source code.

我该如何解决这个问题?潜在的后果是什么?

假设我无法使用 Google 跟踪代码管理器的 "Form Submit" 变量并且我需要发送我的自定义变量。

文档中的相关关键字是 "declare" - Google 建议您在源代码中初始化变量 high (一个原因是在 GTM 片段之后声明数据层会破坏 GTM,因为 GTM 覆盖了 dataLayer 数组的本机 push 方法。您还需要在页面查看事件中可用的值)。

但是,如果您将值动态添加到不是变量声明的 dataLayer,您只是使用 dataLayer 数组的 push() 方法将对象添加到现有的 dataLayer 数组。没关系,其他任何方式都行不通。

始终使用该代码块来推送您自己的值,而不重置/破坏 GTM 的初始 dataLayer 对象,并确保您的 Javascript 代码中没有任何未解决的依赖项:

window.dataLayer = window.dataLayer || []; // creates a new Array only if it doesn't exists yet
dataLayer.push({
    'event':'myFormSubmit',
    'customVariable':'foo'
    });