使用 JavaScript 和 Google 标签管理器更改 html 内容

Change html content using JavaScript and Google Tag Manger

我正在尝试使用 Google 跟踪代码管理器触发的 javascript 根据特定查询字符串更改某些页面 html 内容。

问题 - 它不稳定,有时可以工作并显示图片,有时却无缘无故不工作。

HTML

<style>#dc {display:none;}</style>
<img id="dc" class="alignleft wp-image-2685" src="/someImage.png" width="269" height="400" />

JavaScript

<script type="text/javascript">
     $(document).ready(function() {
            $('#dc').show();
        } 
       );
</script>

这是 GTM 中的代码:

我已经测试了标签是否全部触发,并且它正确触发(当查询字符串 dc=1 时),这里是触发器:

有人知道为什么它不能稳定工作吗?我该如何解决?

您似乎遇到了竞争条件:在某些情况下,GTM 标记似乎在加载 jQuery 之前触发(因此出现 $ is not a function 错误,因为 $ 没有在执行标记时存在,仅使用 Chrome 而不是 Firefox 的原因是因为并非所有浏览器的行为都相同 :)).

您可以做的是在您的代码中的 jQuery

之后插入以下脚本
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
  dataLayer = window.dataLayer || [];
  dataLayer.push({event: "jquery_loaded"});
</script>

然后使用该自定义事件创建 GTM 触发器:

并用那个替换 DOM Ready 触发器。

如果您在 2 种情况下进行比赛(jQuery 已加载并且一些内容正在动态加载),那么您可以使用 setInterval 编写一个小循环来触发 GTM 事件(用于作为触发器)当两个条件都满足时。

它在 Firefox 中工作而不在 Chrome 中工作的原因可能是 Firefox 自版本 57 以来实施的拖尾功能的结果。它会延迟加载跟踪脚本(最多 6 秒),直到您的加载其他脚本。这就是 Max.

提到的 jquery 在您的标签之前加载的原因