【发布时间】:2017-05-09 00:20:32
【问题描述】:
我正在为使用 Google Analytics Classic 的客户开发网站。他们目前没有升级。他们正在使用 Google 跟踪代码管理器,并希望我通过 GTM(我已经能够完成)从 Google Analytics Classic 获取客户端 ID,然后使用 GTM 将其发送到分析。我有它,以便它在检测到该 ID 时触发一个标签,但是当我使用我创建的变量发送该 ID 时,它返回未定义的 95%。
被触发的标签是我的 SendToAnalytics。它是经典的 Google Analytics 标记类型。它由 WindowLoadedWithValidID 触发,当我的变量 CheckForClientID 代码不返回 false 时触发。变量 CheckForClientID 的代码是:
function() {
var getClientId = function () {
try {
ga(function (tracker) {
if (tracker != undefined) {
var clientId = tracker.get('clientId');
return clientId;
} else {
return false;
}
});
} catch (e) {
if (e) {
return false;
}
}
}
getClientId();
}
我的标签 SendToAnalytics 是我遇到问题的地方。它是一种页面视图跟踪类型,它创建一个自定义变量以发送给 GA。该变量的值在 95% 的时间内返回未定义。我已经尝试了很多方法来获得这个价值。我用过和上面类似的代码,我用过:
function(){
var clientID = ga.getAll()[0].get('clientId');
return clientID;
}
还有其他我能想到的。它几乎总是返回 undefined,即使它在另一个触发器触发之后触发,这取决于正在加载的 GA 脚本。
我知道 GA 代码是异步的,但是一旦这个标签被触发,那是因为 GA 脚本已经加载,否则它会继续返回 false。返回 undefined 的变量让我感到困惑,因为它不应该在这个标签被触发之后才初始化,因此应该已经加载了 GA 脚本,或者这是错误的吗? GTM 是否会在看到标签存在时立即初始化变量,无论它是否已被触发?如果是这种情况,我将如何获取该变量的值以返回 clientID 而不是未定义?
【问题讨论】:
-
你的内部函数只有在没有 id 或者出现异常的情况下才会返回。外部函数根本不返回任何内容,所以更大的谜团是为什么这在 5% 的情况下会起作用。
-
在无数次尝试让代码完成我希望的事情后,我提出了这个问题。我编写的代码是我尝试将其恢复为最有效的代码。我忘了放退货声明。我为刚才的问题修复了它,但是之后的代码仍然不能作为变量工作。它触发了标签,但标签没有像我希望的那样获得变量。它返回未定义。
标签: javascript google-analytics google-tag-manager