【问题标题】:When and how to use s.clearVars in Omniture?何时以及如何在 Omniture 中使用 s.clearVars?
【发布时间】:2015-01-20 15:11:01
【问题描述】:

我想了解我可以在 DTM 的哪个位置使用 s.clearVars?我应该将它放在全局配置下的“自定义页面代码”下还是规则“自定义页面代码”下?

清除所有变量的缺点是什么?我是否还要清除内置的 Omniture 变量(例如活动 ID)?或者在 DTM 中清除所有自定义(evar、道具和事件 - 我设置的东西)的最佳方法是什么?

我的 Ajax 应用程序似乎正在从一个调用到另一个调用缓存数据。我遇到以下问题。

http://trackingfirst.com/omniture-ajax-cache-issues/

热衷于了解 s.clearVars 如何在 DTM 中使用它。谢谢。

【问题讨论】:

    标签: adobe-analytics


    【解决方案1】:

    在无法全面评估您的 DTM 设置的情况下,我不确定我能否就最佳解决方法给出明确的答案,但您可以尝试一件事:

    在您最终拨打s.ts.tl 的规则中,请执行以下操作:

    条件部分的规则条件下,选择数据>自定义并点击“添加条件”按钮。

    然后在代码框中,输入:

    var s = _satellite.getToolsByType('sc')[0].getS();
    s.clearVars();
    return true;
    

    更新:您发表了以下评论:

    感谢您的回答。不幸的是,我的规则都是直接调用规则,DTM 中似乎没有“条件”选项。我有 在 - “自定义页面代码” - 分析工具下添加了上述代码 设置 - 但有趣的是“自定义页面代码”没有得到调用 直接调用规则。我将尝试通过“javascript/3rd”运行它 派对标签”看看会发生什么。我可以尝试其他想法吗?谢谢

    你是对的,直接调用规则只有一个条件,那就是 _satellite.track('string') 调用中传递的字符串。老实说,我不知道 Adob​​e 为什么要这样做。也许有一天,Adobe 会扩展它以允许您为直接调用规则设置其他条件,并且基本上只是将“字符串”条件重新标记为直接调用规则标识符,以指定调用哪一个。基本上,他们应该把它当作页面加载和基于事件的规则,除非你只是用那个“字符串”来调用它。顺便说一句,这就是在核心代码(甚至是页面加载和基于事件的规则)中已经在内部调用规则的方式,因此对于 Adob​​e 来说扩展 Direct Call 并不会那么规则。

    另外,您是对的,将代码添加到工具设置中的“自定义页面代码”部分也不起作用。该代码块仅在 DTM 库的初始加载时执行。说到在该自定义页面代码部分中设置内容.. 如果您在那里设置其他 Omniture 变量,您应该注意其他“错误”。长话短说,DTM 不只是在第一次加载时创建一个 s 对象,然后在规则期间引用它;当触发规则时,它会创建一个全新的s 对象。因此,如果您在这些工具配置自定义代码框中设置任何内容(例如,手动设置 linkTrackVars 或更常见的是使用 s_doPlugins,这在被烘焙到 DTM 时也明显缺失......)它们将不会被保留直接规则调用! (但是,它确实将其从直接调用保存到直接调用。我知道.. 令人困惑和不一致,对吧?)

    因此,这将为您提供解决方案.. 基本上,您需要禁用让 DTM 触发 s.ts.tl 调用。只需将 Adob​​e Anlytics 部分中的单选按钮设置为“禁用”,然后在 Javascript/第三方标签 部分的代码框中手动设置您需要设置的所有内容。在那里,您可以放置​​该代码,然后设置您需要设置的任何其他 Omniture 变量。如果您需要引用数据元素,可以使用 _satellite.getVar('element_name') 来获取它们,而不是在 Adob​​e 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();
    });
    

    【讨论】:

    • 感谢您的回答。不幸的是,我的规则都是直接调用规则,DTM 中似乎没有“条件”选项。我已经在 - “自定义页面代码” - 分析工具设置下添加了上面的代码 - 但有趣的是,“自定义页面代码”不会被直接调用规则调用。我将尝试通过“javascript/3rd 方标签”运行它,看看会发生什么。我可以尝试其他想法吗?谢谢。
    • 非常感谢您提供如此详细的解释。我终于开始看到/理解 DTM 的局限性。我想知道您是否可以提供咨询/指导?干杯
    • 这个出色的答案仍然留给我的一个问题是,我们如何在 DTM 触发其页面加载服务器调用后清除变量,这样任何和所有后续基于事件的规则默认情况下都不会拾取这些变量.从这里的答案来看,听起来您必须将所有基于事件的规则更改为仅触发自定义 s.t() 或 s.tl() 调用。任何见解将不胜感激!
    • 跟进去年的评论 - 我想通了...查看新答案。
    • @JDSmith 实际上从 AM 1.8.0 开始有更好的方法;在我刚刚发布的答案中查看更新
    【解决方案2】:

    我想出了一个非常简单的实现 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() 调用时,您希望在一个事件和另一个事件之间清除Vars() 以避免在下一个 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 不同,因为您可以根据自定义事件控制时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-05
      • 2012-02-20
      • 2018-11-11
      • 2011-12-27
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多