首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Google标记管理器问题-在“容器已加载”消息之前提前触发事件

Google标记管理器问题-在“容器已加载”消息之前提前触发事件
EN

Stack Overflow用户
提问于 2021-09-14 06:59:26
回答 2查看 174关注 0票数 0

我正在尝试捕获IP地址,对其进行哈希处理,并将值存储在Google Analytics中的会话范围维度中

首先,我使用以下方法触发一个自定义JS标记来获取用户IP:

代码语言:javascript
运行
AI代码解释
复制
  function getIP(json) {
    dataLayer.push({"event":"ipEvent","ipAddress" : json.ip});  
  }
</script>

<script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script>

该脚本创建一个"ipEvent“,它拉取用户IP并触发”hash2IP scrambled“事件来散列值。一切正常,但问题是当我需要发送散列值通过Pageview,这是执行在3容器加载。

您可以从截图中看到,获取IP的脚本是在"3 Container loaded“消息之前执行的,但实际事件发生在”3 Container loaded“消息之后。

任何想法可以做到这一点(在3容器加载之前获取"ipEvent“)

EN

回答 2

Stack Overflow用户

发布于 2021-09-14 08:10:51

不需要为此触发一个标记。好吧,也许是为了加载散列代码。但我只会使用一些简单的散列函数,并在内联运行它,而不是从其他地方加载它。应避免不必要的网络请求。

将您的主散列逻辑移动到CJS变量并返回散列,而不是接触数据层。

现在,在您想要使用它的任何标记中引用您出色的CJS变量。或者,更好的是,在GA配置变量中。真的由你决定。

结果是:一切正常,但DOM和全局JS作用域没有变化。

票数 1
EN

Stack Overflow用户

发布于 2021-09-14 10:03:04

您的JSONP请求是异步的-您发送请求,并在结果返回时执行回调。

为了确保ip api调用的结果作为第一个事件被可靠地推送,您必须进行一个同步调用,这是ipify不支持的(在这里我可能是错的),而且您也不希望这样做,因为您需要停止执行GTM安装中的所有其他内容。在这种情况下,你还必须以某种方式处理超时等。这不是一个好主意(即使你在GTM之外解决了这个问题,你也不知道API调用的结果什么时候会回来)。

如果您确实想确保IP在给定的标签中可用,请使用标签序列。在这种情况下,您需要在回调函数中包含一个onHtmlSuccess调用,该调用表示您的设置标记已经执行,并且可以触发后续标记。从我的头顶上看,它应该是这样的:

代码语言:javascript
运行
AI代码解释
复制
<script>
function getIP(json) {
    dataLayer.push({"event":"ipEvent","ipAddress" : json.ip}); 
     var gtm = window.google_tag_manager[{{Container ID}}];
    gtm.onHtmlSuccess({{HTML ID}}); 
  }
</script>

<script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script>

对于需要IP的标签,将其用作标签序列中的设置标签。将后续标记设置为仅在设置标记成功时触发,并将设置标记设置为每页仅触发一次,这样就不会对每个标记重复执行API调用。

虽然这不会使您的标签在第一个事件之前触发(因此从技术上讲,它不会回答您的问题),但它确实确保了需要IP的标签被推迟到IP可用时,因此,这可能在某种程度上接近您想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69180167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文