dataLayer.push()肯定会在锚点上触发时向谷歌发送数据吗?

Leo*_*eon 6 javascript jquery events google-tag-manager

这可能看起来像一个简单的问题,但似乎没有任何我能找到的答案.

我正在编写一个onClick事件处理程序,只需dataLayer.push()在单击锚点时调用.

dataLayer.push()同步操作吗?

是否肯定会发送谷歌的GET请求,即使浏览器已经卸载了请求的页面,因为链接被跟踪?

一些浏览器显示连接被取消,一些显示它成功.

我的问题是,如果计算机速度慢,是否可以在发送请求之前卸载页面?

这就是为什么我假设谷歌开始使用该eventCallback属性在链接被跟踪后重定向用户.例如 https://developers.google.com/tag-manager/enhanced-ecommerce#product-clicks

此源代码不包含单击处理程序,但暗示该onClick事件应停止传播并eventCallback设置该函数document.location.

但是,一旦取消该活动,其所有信息都已消失.

这(在我看来)只是错误的做法.例如(CTRL或COMMAND)+ Click在浏览器上打开一个新选项卡.除非onClick事件处理程序允许prorogation继续,否则这将不起作用.

依赖eventCallback也意味着如果google scrips没有加载其中的一个原因(但仍然不太可能),你的链接不起作用.而且你的网站坏了.

因此,这为onClick事件处理程序提供了正确的方法,以允许事件传播并返回true.

这也意味着dataLayer.push()在发送GET请求之后需要返回以使其中的任何一个正常工作.

代码示例:注意:您将在混合环境中获得混合结果.

<a href="/somewhere-else">Link</a>


$(document).on('click', 'a', function(event) {

    // Is dataLayer.push() guaranteed to fire a GET ?
    // data set externally
    dataLayer.push(data);

    return true;
Run Code Online (Sandbox Code Playgroud)

});

是否有人可以保证GET请求将被解雇到谷歌服务器?

谷歌开发者忘记了什么吗?

编辑:更新标题与问题更相关.

Eik*_*rff 5

datalayer.push不会向Google发送任何内容.它将具有键/值对的对象推送到数据层阵列.这可能包含一个事件,该事件反过来触发标记.是否发送标签取决于标签的设置,而不是dataLayer.push.

因此,当您编写自己的点击处理程序时,您自己负责确保您的标记实际被触发.

如果您使用内置点击处理程序,则可以配置延迟以确保您的标记在链接重定向之前有时间触发:

由于链接点击通常会导致浏览器加载新页面并中断任何挂起的HTTP请求,因此您可以选择添加一个小延迟,以允许Tag Manager在重定向到下一页之前正确执行标记.选中"等待标记"选项将延迟链接的打开,直到所有标记都已触发或指定的超时已过,以先到者为准.

您应该能够混合使用这两种方法(在点击上推送数据,但仍然使用事件的"本机"链接点击处理程序).

您还可以尝试在Google Analytics代码中指定"beacon"作为传输方法,在支持此功能的浏览器上(我认为目前只有Chrome)GA将使用navigator.sendBeacon接口,该接口甚至会发送数据以防页面卸载.

您可能认为Google的解决方案不是很优雅(但简单延迟的优势在于它适用于所有标签,而不仅仅适用于GA),但他们并没有"忘记"这个问题.

此外,如果回调失败,如果由Simo Ahava在某处提出,那么结合GA命中回调和重定向的重定向的解决方案应该是GTM可行的,即使它们在GA中实现可能更麻烦.