我正在寻找一种在DTM中动态更新预定义数据元素的方法。一旦页面加载并且数据元素被初始化,就无法更新它们,_sattelite.setVar()不起作用。我可以动态创建数据元素,但它不会在页面之间持续存在。例如:
var currElementName = this.getAttribute('data-analytics-tracking-name');
_satellite.setVar('custom link name', currElementName);
有什么建议吗?我之所以这样问,是因为我将使用MVC框架,并且我希望将一些数据存储在DTM数据元素中,并在视图发生变化时进行更新。谢谢!
答案 0 :(得分:5)
为了将持久数据元素设置为新值,您需要首先更新数据元素所依赖的任何源,然后使用_satellite.getVar('element_name_here')
强制评估数据元素。
这里的关键是 on page load ,持久数据元素的操作顺序基本上是:
但是当显式调用 _satellite.getVar('Example')
时,操作的顺序是:
数据元素示例:
名称:示例
输入: JS对象
路径: someVariable
默认值:默认值
请记住此值:会话
所以,假设我在页面上有以下内容(在DTM脚本标记之前设置):
someVariable = 'foo';
这将提供名为“Example”的数据元素,您可以使用%Example%
或_satellite.getVar('Example')
引用该数据元素,具体取决于上下文。
在会话期间,数据元素将具有该值“foo”。所以要改变它,你会做以下事情:
someVariable='bar';
_satellite.getVar('Example');
你可以在自己的脚本中的某个地方调用它,或者如果你想将它放入混合中,例如:页面加载规则,您可以将其添加为Criteria > Data > Custom
代码框中的条件(注意:如果您将其放在此处,添加return true;
作为第3行),等等..
作为替代方案,如果您感觉更冒险,或者需要为数据元素设置进行解决(例如,您的数据元素是自定义脚本类型,您需要回避那里的逻辑).. ..
如果将数据元素配置为持久性,则会设置名为
的cookie _sdsat_[data element name]
因此,在上面的示例中,它设置了一个名为
的cookie _sdsat_Example
因此,如果确实想要,您只需使用新值更新cookie,然后让默认的操作顺序返回(现在更新的)cookie值。 (注意:由于javascript无法使cookie过期,如果您将范围设置为“访问者”,则可以将过期时间设置为2年,which is what DTM does )