1.页面加载,没有触发 event1
异步调用本质上可能发生在 DOM 就绪或窗口加载 (onLoad) 之后,因此不能保证 onLoad 在进行某些 API(异步)ajax 调用并返回某些内容后触发。
理想情况下,您应该在 API 的 ajax 成功回调函数中触发某些内容。您可以创建和触发 DTM 可以在 基于事件的规则 中侦听的 自定义事件。注意:如果您走这条路线,请确保您在document.body 或后代上创建/触发; DTM 不会监听document 本身的自定义事件。另外,由于我在屏幕截图中看到您使用 jQuery 语法,如果您走这条路,还要注意 jQuery 自定义事件功能与本机 javascript 自定义事件不同。所以例如如果你做$( document.body ).trigger( "someEvent" ),这不会推送到正在听的东西
document.body.addEventListener('someEvent', function (e) { /* ... */ }, false);
DTM 使用上述内容来侦听自定义事件。所以 TL;DR - 如果您打算使用 DTM 的内置自定义事件侦听器,请不要使用 jQuery 语法来创建或广播自定义事件。
或者,在 API 的 ajax 回调函数中,您只需执行 _satellite.track('dc_rule_value_here'); 并创建一个 直接调用 规则,其中 'dc_rule_value_here' 作为字符串条件。
如果您无法向 API ajax 回调函数添加某些内容,那么最好的方法是创建一个 Custom Code 类型的 Data Element,其中包含您在您的屏幕截图条件(如果找到 .wantedClass,则返回 true 或 false)。然后,创建一个 Data Element Changed 类型的 Event Based Rule,其条件反映您从数据元素返回的内容。这并不理想,因为这种规则类型的工作原理是在页面查看期间每 1 秒轮询一次数据元素。这在宏伟的计划中并没有什么大不了的,但它不如其他方法有效(如果你 0 习惯于为很多规则执行此操作,那么它可能会成为一个问题)。请注意,您还应该将数据元素烘焙为仅返回一次 true,这样它就不会在找到后每隔 1 秒触发一次 EBR(DTM 没有本机的“仅触发一次”类型配置)。
2。点击了 DIV,没有触发 event2,但触发了 event1。
不确定这个。从表面上看,听起来 DTM 规则本身是有效的,但是设置 AA s.events 存在问题。可能是您只是打错字并将event1 放入规则中,尽管我确定您检查过......对吗?
可能是您有其他代码(例如s.doPlugins 回调中的代码)正在覆盖它。或者可能是完全触发的其他规则,而不是上面的规则。
如果您提供有关实际设置事件的方式/位置的更多详细信息(包括您可能同时设置这两个事件的其他地方),可能会提供更多帮助,但这听起来有点像我必须在页面上的操作以真正深入了解它的底部:/