我正在通过GTM将价值从网站推向Facebook,但我无权在服务器端进行代码更改。
因此,我需要发送给Fb的每个值都必须在GTM中使用Custom Javacripts。
我可以在控制台中获取这些值,但我不知道为什么我在调试模式下看不到它们。它总是未定义的。
以下是GTM中的代码之一:
function() {
var prod = document.getElementById("product_addtocart_form").elements.namedItem("product").value;
return prod;
}
那么我做错了什么?
答案 0 :(得分:0)
假设代码行在控制台中有效,我怀疑你的函数中的代码是否过早被触发,元素还没有准备好。
确保在触发gtm.dom事件之前不会触发您的代码,如果仍然无效,则等待gtm.load被触发。如果仍然无法工作,那么看看这些元素何时实际就绪(可能是他们是使用AJAX调用创建的?)。
如果gtm本机事件不够晚,当您知道元素已准备就绪时,您应该在dataLayer中触发一个自定义事件,触发您的标记并重新填充变量。希望这可以确保在标记被触发时正确填充变量。
如果使用jQuery AJAX加载元素,您应该能够绑定到文档上的ajaxComplete事件。 See the jQuery docs。然后,您可以将自定义事件激发到数据层,这将触发使用现在应填充的变量中的数据的标记。您可以使用type = custom事件设置触发器,其值为' ajax_complete' (或者你称之为事件的任何事情)。
您的代码看起来像这样:
$(document).on('ajaxComplete', function(){
dataLayer.push({'event':'ajax_complete'});
});
如果在一个页面上触发了多个AJAX事件,那么您必须编写一些逻辑来区分呼叫和/或确保您不会多次触发它。 GTM中的标签中还设置了一个设置,即每页加载时只触发一次'所以你也可以利用它。