这是我在随机页面上经常看到的代码。
我认为这是谷歌跟踪代码,但有人可以确认吗?
当我在 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);
这是由 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 可能会建议您更新到较新的标签。
这只是一个短代码,用于检查变量是否已定义,如果没有,则将其定义为空对象。它类似于:
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}));
免责声明:我只回答了代码的第一行,因为我明白这就是您从标题中要求的内容。但现在我发现您可能指的是整个代码块。如果是这样,请忽略此答案。