Google跟踪代码管理器:每次浏览后都删除自定义HTML块吗?

时间:2018-08-20 03:51:33

标签: javascript google-tag-manager

我们有一个带有Google跟踪代码管理器设置的单页应用程序,并且自定义HTML片段的有效用法用于跟踪库,以便为每个页面视图触发JS方法。尽管有效-它为每个页面视图留下了HTML脚本片段。

我的问题:是否有一些现有功能将删除“自定义HTML”块?

还是我应该在同一脚本中编写自定义代码以清除同一代码段的旧版本?

用于每页跟踪的自定义HTML代码段:

<script type="text/javascript">
  someTrackingLibrary.pageViewEvent();
</script>

注意:自定义脚本块的使用是从给我们的一些建议中得出的,并且在this GTM documentation中有所提及:

  

第三个不成文的规则是该函数应仅返回一个   值。您不应使用自定义JavaScript变量来修改   例如,通过将值推送到dataLayer来全局命名空间。如果你   想篡改函数中的全局变量,最好   为此创建一个自定义HTML标记。

建议不要使用变量:

  

变量绝对不能有副作用

     

还记得如何仅将变量用于返回值吗?好,   有时您可能会想使用变量来更改状态   全局对象或将内容设置或推送到dataLayer中。不要做   它!因为变量可以多种方式解析,而不仅仅是   在标签中,您可能会发现自己创建了无限   循环,将东西多次或严重地推入dataLayer   损害页面性能。

3 个答案:

答案 0 :(得分:2)

几件事:

  • 请勿使用变量进行创建/删除操作:您无法控制何时执行变量(您可以通过控制台输出创建一个虚拟JS变量,您会惊讶于其频率和外观随机调用),因此使用变量修改操作是一个非常糟糕的主意
  • 没有内置的GTM功能来实现您想要的
  • 您可以创建一个自定义标签:请参见以下示例。代码逻辑是a <script> block is the last script available in the stack在执行时(在逻辑上,因为浏览器只是对其进行了解析),因此检索它非常容易。您可以在脚本块的末尾添加一个dataLayer.push调用,以通知GTM该脚本已执行。
  

如果您尝试在没有dataLayer.push的情况下实施解决方案   方法,则您将处于比赛状态,并有可能被GTM删除   脚本代码在执行之前(由于GTM正在加载异步代码   并且可能在浏览器解析这些脚本块之前就已经准备好了。

下面是示例页面代码:

<script>
    var removeBlock = function() {
        var scriptTag = document.scripts[document.scripts.length - 1];
        window.dataLayer = window.dataLayer || [];
        window.dataLayer.push({
            event: "delete_block",
            block: scriptTag
        });
    }
</script>
<script id="block1">
    console.log("block1");
</script>
<script id="block2" type="text/javascript">
    // YOUR ANALYTICS CODE HERE BEFORE GTM PUSH
    console.log("block2");
    removeBlock();
</script>
<script id="block3">
    console.log("block3");
</script>

enter image description here

然后基于event=delete_block创建触发器,这是GTM Custom HTML标记代码:

<script type="text/javascript">
  var block = {{block}}; // GTM dataLayer variable "block"
  block.parentNode.removeChild(block);
</script>

答案 1 :(得分:1)

是否存在一些将删除“自定义HTML”块的功能?

不。 GTM是标签管理器,您需要编写自定义代码才能删除代码块。

如果有某些功能,我建议您通过第三方库进行操作。另外,您可以编写自定义JS或添加明智的标签。

答案 2 :(得分:1)

作为一个迟来的答案,不要再使用自定义HTML标记-出于大多数意图和目的,它们已被custom templates取代。

自定义模板允许定义UI(例如,指定帐户ID或代码所需的任何输入)和代码块。唯一的问题(即使有时很烦,也是一个好问题),那就是您仅限于Google所说的“沙盒javascript”。即您不能使用标准JS的所有功能,则必须通过Google提供的APIS-这是一个“好问题”,因为它提供了更高的安全级别,但是某些(本质上是不安全的)不适用于沙盒Javascript(例如,不修改对象的原型链,不直接访问DOM和其他一些限制。

但是,它们避免了使用自定义标记的副本来过度填充DOM的问题(对于您的示例,您可以call functions that are defined on the global namespace)。