javascript – dataLayer.push()肯定会在锚点上触发时向google发送数据吗?
作者:互联网
这可能看起来像一个简单的问题,但似乎没有任何我能找到的答案.
我正在编写一个onClick事件处理程序,只需在单击一个锚点时调用dataLayer.push().
dataLayer.push()是同步操作吗?
是否肯定会发送谷歌的GET请求,即使浏览器已经卸载了请求的页面,因为链接被跟踪?
一些浏览器显示连接被取消,一些显示它成功.
我的问题是,如果计算机速度慢,是否可以在发送请求之前卸载页面?
这就是为什么我假设谷歌开始使用eventCallback属性在链接被跟踪后重定向用户.
例如
https://developers.google.com/tag-manager/enhanced-ecommerce#product-clicks
此源代码不包含单击处理程序,但暗示onClick事件应该停止传播并让eventCallback函数设置document.location.
但是,一旦取消该活动,其所有信息都已消失.
这(在我看来)只是错误的做法.
例如
(CTRL或COMMAND)单击在浏览器上打开新选项卡.除非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;
});
是否有人可以保证GET请求将被解雇到谷歌服务器?
谷歌开发者忘记了什么吗?
编辑:更新标题与问题更相关.
解决方法:
datalayer.push不会向Google发送任何内容.它将具有键/值对的对象推送到数据层阵列.这可能包含一个事件,该事件反过来触发标记.是否发送标签取决于标签的设置,而不是dataLayer.push.
因此,当您编写自己的点击处理程序时,您自己负责确保您的标记实际被触发.
如果你使用内置的点击处理程序,你可以configure a delay to make sure your tag has time to fire before the link redirects:
Since link clicks usually cause the browser to load a new page and
interrupt any pending HTTP request, you have the option to add a small
delay to allow tags fired by Tag Manager to execute properly before
redirecting to the next page. Checking the “Wait For Tags” option will
delay opening of links until all tags have fired or the specified
timeout has elapsed, whichever comes first.
您应该能够混合使用这两种方法(在点击上推送数据,但仍然使用事件的“本机”链接点击处理程序).
You can also try to specify “beacon” as the transport method在您的Google Analytics代码中,在支持此功能的浏览器上(我认为目前只有Chrome)GA将使用navigator.sendBeacon接口,该接口即使在页面卸载的情况下也会发送数据.
您可能认为Google的解决方案不是很优雅(但简单延迟的优势在于它适用于所有标签,而不仅仅适用于GA),但他们并没有“忘记”这个问题.
此外,如果回调失败,如果由Simo Ahava在某处提出,那么将GA命中回调与重定向重定向的解决方案也应该是GTM可行的,即使它们在GA中实现起来可能更麻烦.
标签:jquery,javascript,events,google-tag-manager 来源: https://codeday.me/bug/20190608/1197751.html