adobe - 无法通过 Adobe Launch 获取当前点击值
问题描述
我在 adobe 启动中创建了一个单击事件,它将捕获链接的值并将其发送到分析。我创建了一个用于保存值的数据元素,并且在我的 DOM 中我将值保存在本地存储中。
本地存储代码:
$('.card').click(function() {
var name = $(this).text();
localStorage.setItem('productName', name);
});
我的问题是,当我单击第一个链接时,没有保存任何值,但是当我单击第二个链接后,它会保存第一个链接的值,而在第三个链接上保存第二个链接的值,依此类推。我想将当前链接值保存在 evar3 变量中。
数据元素:
谢谢,哈西特
解决方案
关于为什么您的 jQuery 选择器与您的规则选择器不匹配,我有点摸不着头脑,但这可能不是立即相关或相关的,考虑到您说您通常看到数据弹出,所以从表面上看,我我会忽略这一点。
但总的来说,听起来你的 jQuery 代码是在评估规则之后执行的,所以它实际上落后了一步。如果您打算像这样保留两个单独的单击事件侦听器,我不确定您是否可以做些什么。
您将不得不重组以使一条链脱离另一条链(我认为这实际上对于 jQuery > Launch as-is 是不可行的。也许如果您编写两个带有 Promise 链的单独自定义代码块,但那种回避启动和 IMO 使事情开始变得过于复杂(见下文))。更好的是,将它们合并到一个单击事件侦听器中。在那张纸条上..
为什么你有两个单独的点击事件监听器?这是传递链接文本的唯一原因吗?因为您可以在启动规则本身中引用单击的元素。
您应该能够%this.innerText%
在Set Variables字段中引用。或者您可以this
在规则内的自定义代码框中引用对象。
IOW 从表面上看,我不明白您为什么需要或应该创建/使用该 jQuery 侦听器或像这样推送到本地存储。
更新:
您评论了以下内容:
我尝试使用 %this.innerText% 它也没有显示当前值。我首先将值推送到本地存储,因为我的链接值是通过 API 在运行时生成的。它们不是硬编码的。我还试图弄清楚为什么我的规则在评估我的 jquery 之前被触发。但是当我使用
_satellite.getVar('Product Name');
它检查控制台时,它会显示正确的值,但在调试器中控制台值是错误的。你能告诉我你想创建规则以正确触发它的方式吗?谢谢,
好的,所以您的链接值是通过 API 调用在运行时生成的?好吧,现在这听起来像是(时间)问题所在,原则上我提到你在 jQuery 和 Launch 代码之间遇到的问题是相同的。假设您无法更改此动态链接功能,您有两种选择:
1. 在生成链接值的 API 代码的回调中显式触发启动规则(直接调用规则)。
这是更好的方法,因为您的 API 与链接跟踪代码之间不会出现竞争条件问题。但是,关于此方法的最大警告是,它需要您主动向站点添加代码,这对您来说可能可行,也可能不可行。
我不知道您生成链接的代码是什么样的,但大概是一些 ajax 调用并从成功回调生成。因此,在回调中,您将添加如下代码行:
_satellite.track('product_image_click', {
text : elem.innerText
});
同样,我不知道生成链接的 API 代码是什么样的,但大概你在其中有一些元素对象,你附加到或更新 DOM,所以对于这个例子,我将其称为elem
.
'product_image_click' - 这是您在界面中用于直接调用规则标识符的值,例如:
然后_satellite.track()
call 还在第二个参数中包含一个对象有效负载,您可以将其传递给直接调用规则。所以在上面的代码中,我设置了一个名为的属性text
并给它一个值elem.innerText
。
然后,在您设置变量的直接调用规则中,您传递的数据可以从event.details
自定义代码框内的对象(例如event.details.text
)中引用,或者使用%
接口字段中的语法(例如%event.details.text%
)。
2.利用setTimeout
延迟评估链接点击。
与选项 #1 相比,此方法的一个优点是它是被动的。您不必直接将代码添加到您的网站以使其正常工作。
但是,这是更隐蔽的选项,因为您真的不知道生成链接需要多长时间。但一般来说,如果您可以确定链接生成 API 平均需要 250 毫秒来完成它的工作,并且您将超时设置为 300-500 毫秒,那么大多数时候您可能会没事。但是,它永远不是 100% 的保证。
此外,如果点击链接最终会将访问者重定向到另一个页面,那么此解决方案可能根本不适合您,因为浏览器几乎肯定会在有机会执行之前进行导航。正因为如此,我通常不会提到这个作为一个选项,但由于你提到这个链接涉及一个在点击时生成链接值的 API,我想这可能不是导航/重定向链接,所以也许这个如果您不能执行选项#1,您可以选择这个选项。
首先,创建一个与选项#1 相同的直接调用规则。这将是接收链接文本并进行 Adobe Analytics(或任何其他营销标签)调用的规则。
然后,创建一个单独的规则作为点击事件,类似于您当前尝试执行的操作(根据您的 css 选择器侦听链接点击)。在此规则中,您不会设置任何 AA 变量。相反,使用如下代码添加自定义 js 框:
var elem = this;
(function (elem) {
window.setTimeout(function() {
_satellite.track('product_image_click', {
text : elem.innerText
});
}, 500);
})(elem);
所以当规则被触发时,它会创建一个setTimeout
回调来调用第一个规则,传递有效载荷中的链接文本。而且.. 希望代码示例中显示的 500 毫秒超时足以让 API 完成其工作。您可以向上或向下调整它。
推荐阅读
- geofencing - 如何在没有 locationupdates 和当前位置的情况下使用 api 响应位置实现地理围栏
- bash - 将 Hive 列值导入 CSV 时,将其替换为当前日期
- html - 正则表达式,如果第二个正则表达式不在第一个正则表达式中,则从第二个正则表达式中选择
- javascript - 使用 Redux 更改路由时如何更改菜单切换状态
- android - MPAndroidChart 处的 ValueFormatter 重复了两次值
- android - 在自定义复合视图中“TextInputLayout”未显示扩展提示
- android - 谷歌分析是否适用于未上传到谷歌游戏商店的应用程序?
- android - 除了通过音频管理器之外,还有其他方法可以获取当前音量吗?
- html - 在 PDF 中绘制框并捕获坐标
- java - Apache Ignite 缓存与 Postgresql