使用事件跟踪链接 - 竞争条件
Track Links Using Events - Race Conditions
我正在构建 AngularJS 个应用程序,每个应用程序都具有 header 和 links:
<a href="https://app1.company.com">App1</a>
<a href="https://app2.company.com">App2</a>
每个应用程序 运行 在其自己的子域上,当用户单击 header 上的 link - 页面重定向到该应用程序。
我必须使用 link 来跟踪用户操作,例如onClick
个 Omniture 事件(但问题也适用于 Google Analytics)。当我添加一个 onClick
事件调用函数将事件发送到 Omniture 时,例如:
<a href="https://app1.company.com" ng-click="trackLink('header-app1')">App1</a>
trackLink()
是AngularJS服务的一个函数,简单实现:
trackLink: function (eVar8Code) {
s = this.getSVariable(s);
s.eVar8 = eVar8Code;
s.prop28 = s.eVar8;
this.sendOmnitureMessage(s, send, false);
return s;
},
该函数异步执行,returns 立即执行。然后标准 link 的行为开始:页面被重定向到 "href" 属性中定义的 URL。新页面加载速度非常快(大约 70 毫秒),但 AJAX 对 Omniture 的请求尚未执行:全是异步的。
我认为对 link 使用事件是不正确的方法,应该使用查询参数,例如:
<a href="https://app1.company.com?iLink=header-app1">App1</a>
但很难说服一些人。
在 link 上跟踪事件的最佳做法是什么?
更改您的函数以包含一个短超时(可能您会让它 return false 以抑制默认 link 行为,并通过位置对象重定向)。
Google Analytics 具有在发送对 Google 的调用后执行的命中回调,您可能想查看 Adobe Analytics 是否有类似的东西(因为这可用于在已拨打跟踪电话)。
事件跟踪和查询参数是否可以互换取决于您的用例(它们当然测量不同的东西)。然而,事件跟踪是一种广为接受的 link 跟踪方式。
正如@Eike Pierstorff 所建议的那样 - 我使用 Adobe Analytics native library 的功能来设置延迟(200 毫秒),这使调用 Adobe Analytics 的成功机会大大增加:
在HTML中:
<a href="https://app1.company.com" data-omniture-link data-track-code="header-nav-deliveries-returns">App1</a>
在 AngularJS 服务中:
sendOmnitureMessageWithDelay: function (s, element, eVar8Code) {
var s = s_gi(s_account); // jshint ignore:line
s.useForcedLinkTracking = true;
s.forcedLinkTrackingTimeout = 200; // Max number of milliseconds to wait for tracking to finish
s.linkTrackVars = 'eVar8,prop28';
s.eVar8 = eVar8Code;
s.prop28 = eVar8Code;
var target = element;
if (!target) {
target = true;
}
s.tl(target, 'o', s.eVar8, null, 'navigate');
this.cleanOmnitureVars();
}
这里,元素 - 是 HTML 元素约。
它在 99% 的情况下运行良好,但在调用 Adobe 之前加载页面的缓慢和旧设备上存在问题。看来这个问题没有好的解决方案,也不能保证事件总是会记录在 Adobe Analytics(或 Google Analytics)中。
我正在构建 AngularJS 个应用程序,每个应用程序都具有 header 和 links:
<a href="https://app1.company.com">App1</a>
<a href="https://app2.company.com">App2</a>
每个应用程序 运行 在其自己的子域上,当用户单击 header 上的 link - 页面重定向到该应用程序。
我必须使用 link 来跟踪用户操作,例如onClick
个 Omniture 事件(但问题也适用于 Google Analytics)。当我添加一个 onClick
事件调用函数将事件发送到 Omniture 时,例如:
<a href="https://app1.company.com" ng-click="trackLink('header-app1')">App1</a>
trackLink()
是AngularJS服务的一个函数,简单实现:
trackLink: function (eVar8Code) {
s = this.getSVariable(s);
s.eVar8 = eVar8Code;
s.prop28 = s.eVar8;
this.sendOmnitureMessage(s, send, false);
return s;
},
该函数异步执行,returns 立即执行。然后标准 link 的行为开始:页面被重定向到 "href" 属性中定义的 URL。新页面加载速度非常快(大约 70 毫秒),但 AJAX 对 Omniture 的请求尚未执行:全是异步的。
我认为对 link 使用事件是不正确的方法,应该使用查询参数,例如:
<a href="https://app1.company.com?iLink=header-app1">App1</a>
但很难说服一些人。
在 link 上跟踪事件的最佳做法是什么?
更改您的函数以包含一个短超时(可能您会让它 return false 以抑制默认 link 行为,并通过位置对象重定向)。
Google Analytics 具有在发送对 Google 的调用后执行的命中回调,您可能想查看 Adobe Analytics 是否有类似的东西(因为这可用于在已拨打跟踪电话)。
事件跟踪和查询参数是否可以互换取决于您的用例(它们当然测量不同的东西)。然而,事件跟踪是一种广为接受的 link 跟踪方式。
正如@Eike Pierstorff 所建议的那样 - 我使用 Adobe Analytics native library 的功能来设置延迟(200 毫秒),这使调用 Adobe Analytics 的成功机会大大增加:
在HTML中:
<a href="https://app1.company.com" data-omniture-link data-track-code="header-nav-deliveries-returns">App1</a>
在 AngularJS 服务中:
sendOmnitureMessageWithDelay: function (s, element, eVar8Code) {
var s = s_gi(s_account); // jshint ignore:line
s.useForcedLinkTracking = true;
s.forcedLinkTrackingTimeout = 200; // Max number of milliseconds to wait for tracking to finish
s.linkTrackVars = 'eVar8,prop28';
s.eVar8 = eVar8Code;
s.prop28 = eVar8Code;
var target = element;
if (!target) {
target = true;
}
s.tl(target, 'o', s.eVar8, null, 'navigate');
this.cleanOmnitureVars();
}
这里,元素 - 是 HTML 元素约。
它在 99% 的情况下运行良好,但在调用 Adobe 之前加载页面的缓慢和旧设备上存在问题。看来这个问题没有好的解决方案,也不能保证事件总是会记录在 Adobe Analytics(或 Google Analytics)中。