如何使用 dataLayer 向 google 标签管理器发出 http 请求?
how to make http request to google tag manager with dataLayer?
我有以下代码行,基本上是 google 标签管理器脚本:
<!DOCTYPE html>
<html dir="ltr">
<head>
<!-- Google Tag Manager -->
<script>
window.dataLayer = window.dataLayer || [];
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-M3WNDLC');</script>
<!-- End Google Tag Manager -->
<meta charset="utf-8"/>
<title>Test Page</title>
</head>
<body>
</body>
</html>
接下来我要做的是:
- 将该代码粘贴到任何 HTML 页面上
- 打开开发者工具。
- 转到“网络”选项卡并清除其他所有内容,这样我就不会对即将发出的 HTTP 请求感到困惑
- 转到 javascript 控制台
- 输入
window.dataLayer.push({food:"pizza",event:"pageview"})
然后按 enter
- 我输入
window.dataLayer
来检查它的内容,并确认它有第 5 步中的新项目。
- 我转到我的开发人员控制台中的“网络”选项卡并注意到 没有向 google 标签管理器服务器
发出 http 请求
所以我的问题是,如何将我的新 window.dataLayer
元素传输到 google 标签管理器? window.dataLayer
应该是可观察的吗? GTM 有一些观察器会在 window.dataLayer
的状态发生变化时触发功能?
在当前版本中,Google 跟踪代码管理器是一种纯粹的客户端技术。 GUI 的唯一功能是配置这些标签,然后将这些标签与一些样板 Javascript(一个选择器引擎,以及评估触发器条件和变量值的逻辑)捆绑在一起。这个文件然后被浏览器下载,从那时起就没有与 GTM 服务器的交互。
您的示例所做的只是向 dataLayer 数组添加一个值。虽然 GTM 使用一些额外的逻辑增强了 dataLayer 数组的 push 方法,但这在核心上仍然只是一种向数组添加值的方法,不需要服务器交互。如果您配置了与服务器交互的标签,您将只会收到 http 请求。
显然 Google 正在开发用于标签管理的服务器端解决方案(我认为类似于 segment.com),它将存在于 Google 云中的虚拟机上,并且那时向 GTM 发送 http 请求的想法可能有意义。目前,GTM 是一个已经存在于浏览器中的 Javascript,因此不需要 http 请求来与 GTM 通信。
我有以下代码行,基本上是 google 标签管理器脚本:
<!DOCTYPE html>
<html dir="ltr">
<head>
<!-- Google Tag Manager -->
<script>
window.dataLayer = window.dataLayer || [];
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-M3WNDLC');</script>
<!-- End Google Tag Manager -->
<meta charset="utf-8"/>
<title>Test Page</title>
</head>
<body>
</body>
</html>
接下来我要做的是:
- 将该代码粘贴到任何 HTML 页面上
- 打开开发者工具。
- 转到“网络”选项卡并清除其他所有内容,这样我就不会对即将发出的 HTTP 请求感到困惑
- 转到 javascript 控制台
- 输入
window.dataLayer.push({food:"pizza",event:"pageview"})
然后按 enter - 我输入
window.dataLayer
来检查它的内容,并确认它有第 5 步中的新项目。 - 我转到我的开发人员控制台中的“网络”选项卡并注意到 没有向 google 标签管理器服务器 发出 http 请求
所以我的问题是,如何将我的新 window.dataLayer
元素传输到 google 标签管理器? window.dataLayer
应该是可观察的吗? GTM 有一些观察器会在 window.dataLayer
的状态发生变化时触发功能?
在当前版本中,Google 跟踪代码管理器是一种纯粹的客户端技术。 GUI 的唯一功能是配置这些标签,然后将这些标签与一些样板 Javascript(一个选择器引擎,以及评估触发器条件和变量值的逻辑)捆绑在一起。这个文件然后被浏览器下载,从那时起就没有与 GTM 服务器的交互。
您的示例所做的只是向 dataLayer 数组添加一个值。虽然 GTM 使用一些额外的逻辑增强了 dataLayer 数组的 push 方法,但这在核心上仍然只是一种向数组添加值的方法,不需要服务器交互。如果您配置了与服务器交互的标签,您将只会收到 http 请求。
显然 Google 正在开发用于标签管理的服务器端解决方案(我认为类似于 segment.com),它将存在于 Google 云中的虚拟机上,并且那时向 GTM 发送 http 请求的想法可能有意义。目前,GTM 是一个已经存在于浏览器中的 Javascript,因此不需要 http 请求来与 GTM 通信。