我导航到的大多数页面上的这个脚本是什么?

问题描述 投票:0回答:2

这是我在随机页面上经常看到的代码。

我认为这是谷歌跟踪代码,但有人可以确认吗?

当我在 JSFiddle 中运行它时,似乎没有发生任何事情。

var tvt = tvt || {};
tvt.captureVariables = function(a) {
  for (var b = new Date, c = {}, d = Object.keys(a || {}), e = 0, f; f = d[e]; e++)
    if (a.hasOwnProperty(f) &&
      "undefined" != typeof a[f]) try {
      var g = [];
      c[f] = JSON.stringify(a[f], function(a, b) {
        try {
          if ("function" !== typeof b) {
            if ("object" === typeof b && null !== b) {
              if (b instanceof HTMLElement || b instanceof Node || -1 != g.indexOf(b)) return;
              g.push(b)
            }
            return b
          }
        } catch (c) {}
      })
    } catch (l) {}
    a = document.createEvent("CustomEvent");
  a.initCustomEvent("TvtRetrievedVariablesEvent", !0, !0, {
    variables: c,
    date: b
  });
  window.dispatchEvent(a)
};
window.setTimeout(function() {
  tvt.captureVariables({
    'dataLayer': window['dataLayer']
  })
}, 2000);

javascript html nodes tracking htmlelements
2个回答
11
投票

这是由 Google 的 Tag Assistant 扩展注入的脚本。来源要大得多。

我已经取消了源代码,可以在 Gist here 找到它。请注意,它大约有 6300 行长 - 对于这个答案来说,大约两万个字符太长了。

注入发生在第 3030 行左右,使用动态创建的脚本。请注意

kg
,以及他们如何依赖
Function.prototype.toString
来获取函数的源代码。

lg = function(a) {
  if (!a.Ab && (a.Ab = !0, a = a.X(), a = Object.keys(a).map(function(a) {
    return "'" + a + "': window['" + a + "']"
  }), 0 < a.length && (!aa.tvt || !aa.tvt.captureVariables))) {
    var b = document.createElement("script");
    b.textContent = "var tvt = tvt || {}; tvt.captureVariables = " + kg + ";window.setTimeout(function() {tvt.captureVariables({" + a.join(",") + "})}, 2000);";
    (document.head || document.documentElement).appendChild(b)
  }
}

kg
可以找到之后,如下,与你发布的内容相对应。

kg = function(a) {
  for (var b = new Date, c = {}, d = Object.keys(a || {}), e = 0, f; f = d[e]; e++)
    if (a.hasOwnProperty(f) &&
      "undefined" != typeof a[f]) try {
      var g = [];
      c[f] = JSON.stringify(a[f], function(a, b) {
        try {
          if ("function" !== typeof b) {
            if ("object" === typeof b && null !== b) {
              if (b instanceof HTMLElement || b instanceof Node || -1 != g.indexOf(b)) return;
              g.push(b)
            }
            return b
          }
        } catch (c) {}
      })
    } catch (l) {}
  a = document.createEvent("CustomEvent");
  a.initCustomEvent("TvtRetrievedVariablesEvent", !0, !0, {
    variables: c,
    date: b
  });
  window.dispatchEvent(a)
};

有关扩展程序的简介,来自关于 Tag Assistant

关于标签助理

Tag Assistant 是一个 Chrome 扩展程序,可自动验证任何给定页面上 Google 跟踪脚本的实现。目前它适用于:

  • 谷歌分析(ga.js)

  • 谷歌分析(dc.js)

  • AdWords 转化跟踪

  • AdWords 再营销(旧版)

  • AdWords 再营销(新的再营销标签)

  • 双击泛光灯

  • 谷歌标签管理器

标签助手如何工作

安装扩展程序后,您将在您正在查看的页面上看到一个指示标签状态的图标。

  • 带有“x”的灰色图标表示页面上未找到代码

  • 如果找到有效标签,则会显示绿色指示器。图标中的数字表示找到的标签数量

  • 蓝色指示器将显示有关改善整体标签健康状况的建议

  • 黄色指示器将显示发现标签存在轻微的实施问题

  • 红色指示器将显示发现存在严重实施问题的标签

单击图标可打开包含标签详细信息的窗口。它显示了找到的标签数量、发现的错误数量、任何错误以及可用于解决问题的最相关帮助文档的链接。此外,Tag Assistant 还会在可以改进时提出建议。例如,如果安装了过时的 Analytics 标签,Tag Assistant 可能会建议您更新到较新的标签。


2
投票

这只是一个短代码,用于检查变量是否已定义,如果没有,则将其定义为空对象。它类似于:

if(tvt === undefined){
   tvt = {};
}

基本上,它确保:

  • 变量已定义(和对象)
  • 它保留任何以前的属性(如果有)

var obj1 = {prop: 123};
var obj2 = obj1 || {}; // obj2 will have the value of obj1 because obj1 is defined
var obj3 = obj3 || {}; // obj will be an empty object

document.write(JSON.stringify({obj2: obj2, obj3: obj3}));


免责声明:我只回答了代码的第一行,因为我明白这就是您从标题中要求的内容。但现在我发现您可能指的是整个代码块。如果是这样,请忽略此答案。

© www.soinside.com 2019 - 2024. All rights reserved.