我正在按照以下说明在Adobe DTM管理面板中定义数据元素:
http://microsite.omniture.com/t2/help/en_US/dtm/index.html#Data_Elements
我已经成功测试了相当标准的JS变量,例如document.URL
;这会正确地填充到prop和/或eVar中。
我们的框架是有角度的;我们创建了一个名为“ analytics”的Angular工厂,其中包含需要由我们的分析包访问的值。
我还通过chrome开发人员工具测试了工厂,以确保其在控制台中返回正确的值,并且确实返回正确的值。
访问这些值的示例行如下所示:angular.element('*[ng-app]').injector().get('analytics').sVar.profileId
这会在控制台中返回正确的值,例如:"1234-5678-9101"
当我尝试在Adobe DTM中使用此路径时,在分配给该值的prop和/或eVar中未填充任何值。
我想知道Adobe Analytics在解释此路径时是否遇到问题,或者我使用的路径不正确。我对AngularJS的了解是初学者。
谢谢。
最佳答案
那不是真正的路径..这是一组链接在一起的js表达式,所以我不确定DTM是否可以实际处理它。
您是否尝试过将其作为自定义脚本来执行?如果您这样做的话,它肯定会起作用。
如果仍然无法使用,则听起来您还有时间问题。向下滚动到该页面上的“数据元素可用性”部分。
但是即使那样,这还是不够的。例如如果您在规则中使用此规则,而该规则设置为在数据甚至不存在之前就可以触发的“顶部”触发。因此,您可能也需要更改它。
编辑带有有关计时的更多信息
DTM当前不提供控制通过接口设置数据元素的时间的方式(例如,基于事件的规则中的下拉菜单)。但是,它确实提供了一种在一般情况下显式设置它的方法。
简而言之,您可以调用它来显式评估数据元素_satellite.getVar('data element name');
您将其放置在何处取决于何时何地需要它。因此,基本上,您将在DTM允许定时控制的情况下进行调用。
例如,如前所述,向下滚动到“ Data Element Availability”部分以获取有关如何显式设置数据元素作为规则条件一部分的详细信息。例如,可以将页面加载规则设置为在DOM就绪或Onload(window.load)上弹出。
甚至可能这对您也不起作用,例如如果在dom准备就绪或window.load之后发生了角度服务层调用(我不知道您的脚本实际上在做什么)。
如果是这样的话,另一种方法是将DTM底部页面代码放在回调中,以确保您可以从angular的服务层调用中获取数据,并且(如果尚未使用)将Adobe分析调用更改为在“页面底部”触发。
或者,您可以按照自己的节奏让初始Adobe Analytics页面视图发生,并调用DTM Direct Call规则,并使您的变量作为第二个Adobe Analytics调用弹出。基本上,有效的方法是创建“直接调用”规则,并为条件字符串添加诸如“ foobar”之类的独特内容,然后在规则中设置Adobe var。然后在数据层值可用时弹出的任何角度回调中,您将调用_satellite.track('foobar')
编辑#2
因此,我仔细研究了DTM核心代码,在我看来,也会在dom准备就绪时设置为pageBottomFired
。因此,基本上将true
包裹在某些内容中对您不起作用(上面的删除线)。海事组织,我不认为应该是这种方式,但我想这就是事实。
我肯定知道直接调用方法会起作用,因为我以前曾经使用过这种方法。但是我同意,这不是理想的解决方案。您可以做的一件事是从主工具列表中删除Adobe Analytics,然后从直接调用规则中将其输出为自定义js,这基本上意味着数据元素现在毫无意义,因为您可以直接弹出s.prop或w / e以及Adobe Analytics代码直接在其中。简而言之,这是一个非常丑陋的解决方案,无法解决DTM的问题,但是除非Adobe进行更改以仅在显式调用它时仅触发_satellite.pageBottom()
,否则它要么存在,要么存在双重Adobe Analytics请求:/
我想另一种替代方法可能是将实际的DTM脚本包含到您的angular.js回调中,但是a)也会破坏具有完整计时范围的DTM的值,b)我不知道DTM对此会有何反应。我可能会试用它,看看它是否“有效”,但是没有希望。