我想了解DTM在哪里可以使用s.clearVars?将它放在全局配置下的“自定义页面代码”下或“规则”自定义页面代码下?
清除所有变量的缺点是什么?我还要清除内置的Omniture变量(例如Campaign ID)吗?或者在DTM中清除所有自定义(evar,道具和事件 - 我设置的东西)的最佳方法是什么?
我的Ajax应用程序似乎是从调用到调用缓存数据。我遇到了以下问题。
http://trackingfirst.com/omniture-ajax-cache-issues/
热衷于了解s.clearVars如何在DTM中使用它。感谢。
答案 0 :(得分:2)
我不确定如果不能完全评估您的DTM设置,我可以给出最佳解决方案的明确答案,但有一件事可以尝试:
在您最终进行s.t
或s.tl
来电的规则中,请执行以下操作:
在条件部分的规则条件下,选择数据>自定义,然后点击“添加条件”按钮。
然后在代码框中输入:
var s = _satellite.getToolsByType('sc')[0].getS();
s.clearVars();
return true;
更新:您评论了以下内容:
感谢您的回答。不幸的是,我的规则都是直接呼叫规则,DTM中似乎没有“条件”选项。我有 添加了上面的代码 - “自定义页面代码” - 分析工具 设置 - 但有趣的是“自定义页面代码”无法调用 直接通话规则。我将尝试通过“javascript / 3rd”运行它 派对标签“看看会发生什么。我可以尝试其他想法吗?谢谢
你说得对,Direct Call规则只有一个条件,那就是_satellite.track('string')
调用中传递的字符串。老实说,我不知道为什么Adobe这样做。也许有一天Adobe会扩展它以允许您为直接调用规则设置其他条件,并且基本上只是将“字符串”条件重新标记为直接调用规则标识符以指定要调用的那个。基本上,他们应该像处理页面加载和基于事件的规则一样对待它,除了你只是用那个“字符串”调用它。顺便提一下,这就是如何在内核中调用规则,在核心代码中(甚至是基于页面加载和基于事件的规则),因此对于Adobe来说,扩展直接调用并不是 规则。
此外,您是对的,将代码添加到工具设置中的“自定义页面代码”部分也不起作用。该块代码仅在DTM库的初始加载时执行。说到在自定义页面代码部分设置内容..如果您在那里设置其他Omniture变量,还应该注意其他“错误”。简而言之,DTM不仅在第一次加载时创建s
对象,然后在规则期间引用它;它会在触发规则时创建一个全新的s
对象。因此,如果您在这些工具配置自定义代码框中设置任何内容(例如,手动设置linkTrackVars
或更常见,使用s_doPlugins
,这也明显缺少融入DTM ......)他们将不能保留直接规则调用! (但是,它确实保持直接呼叫直接呼叫。我知道......令人困惑和不一致,对吗?)
因此,这可以为您提供解决方案..基本上,您需要禁用让DTM触发s.t
或s.tl
来电。只需将Adobe Anlytics部分中的单选按钮设置为“已禁用”,然后在 Javascript /第三方标记部分的代码框中设置您需要手动设置的所有内容。在那里,您可以放置该代码,然后设置您需要设置的任何其他Omniture变量。如果您需要引用数据元素,则可以使用_satellite.getVar('element_name')
来获取它们,而不是使用您在Adobe Analytics部分中使用的%element_name%
占位符。然后,自己结束s.t()
或s.tl()
电话。换句话说,将其视为普通的Omniture实现,其中代码恰好在DTM中托管,而不是使用DTM内置的任何内容。
更新:AppMeasurement 1.8.0
AppMeasurement Release Notes(向下滚动到 JavaScript 1.8.0 )
Adobe推出了两个可以将回调函数注册到的事件:
s.registerPreTrackCallback
s.registerPostTrackCallback
有了这个,您可以注册一个触发s.clearVars()
示例强>
s.registerPreTrackCallback(function() {
s.clearVars();
});
答案 1 :(得分:0)
我提出了一个非常简单的实现clearVars的解决方案,它只需要在每次调用后重写s.t()来触发clearVars。
您希望全局定义此项,例如在DTM中的全局自定义代码中,以便它只运行一次:
// override s.t() to trigger clearVars after every call to it
var t_orig = s.t;
s.t = function(){
t_orig.apply(this, arguments);
try {
s.clearVars();
} catch(e){}
}
使用此解决方案,您无需担心意外清除自定义脚本或基于事件的规则设置的变量。
第二种情况是当你在一个应用程序中有多个s.tl()调用,并且你想在一个事件和另一个事件之间清除var()以避免在下一个s.tl中发送相同的变量( )。
为此,请在调用s.tl()之前在自定义脚本中使用以下代码,或者在基于事件的DTM规则中的自定义条件块顶部使用以下代码:
// clear pre-existing variables here, before anything new gets set
var s = _satellite.getToolsByType('sc')[0].getS(); // this line is optional and for use in DTM only; not necessary if you are sure your "s" object is already set to the correct reference.
s.clearVars();
<强>更新强>
正如@CrayonViolent所提到的,自从AM 1.8.0起,Adobe就为此目的引入了回调方法:s.registerPreTrackCallback和s.registerPostTrackCallback。
我将把原来的答案留在这里作为替代方法,因为使用内置函数和覆盖函数之间仍然存在差异,并且对事物的时序进行更细粒度的控制可能会派上用场(例如,你想保证你的代码在任何其他注册的回调后触发。)
我在第二个场景中概述的方法仍然有效,并且与使用s.registerPreTrackCallback不同,因为您可以根据自定义事件控制时间。