测试 Facebook 像素 ID 是否已加载

mic*_*ael 4 facebook

如果调用 facebook 函数:

fbq('init', <pixel_id>)
Run Code Online (Sandbox Code Playgroud)

对于相同的像素 id 不止一次,它会产生错误:

Facebook 像素错误:像素 ID 重复

这个答案的解决方案是首先使用

if(typeof fbq === 'undefined') {
fbq('init', <pixel_id>)
}
Run Code Online (Sandbox Code Playgroud)

但是我在同一页面上使用了多个 pixel_ids。所以如果第一个像素 id 已经加载,这将不会加载第二个像素 id。

有没有办法检查是否加载了特定的 pixelid 而不仅仅是加载了 fbq?就像是:

if(typeof fbq === 'undefined') {
    fbq('init', <pixel_id>);
}
else {
    if (!fbq.pixel_id)
            fbq('init', <pixel_id>);
}
Run Code Online (Sandbox Code Playgroud)

Ana*_*yal 5

你应该可以使用

fbq.getState().pixels[0] 
Run Code Online (Sandbox Code Playgroud)

识别哪个像素已经加载。

然后您只需要再次调用 init 函数,但使用新的像素 ID

fbq('init', <pixel_id>);
Run Code Online (Sandbox Code Playgroud)

然后你应该能够看到你加载了 2 个像素

fbq.getState().pixels.length
Run Code Online (Sandbox Code Playgroud)

总之,要修改您的初始代码,我相信您想要的是:

if(typeof fbq === 'undefined') {
    fbq('init', <pixel_id1>);
}
else {
    if (fbq.getState().pixels[0] === <pixel_id2>)
            fbq('init', <pixel_id2>);
}
Run Code Online (Sandbox Code Playgroud)

依此类推 - 您可以循环像素数组中的整个像素集合,以避免重复发布其中任何一个。

您甚至可以使用此 API 来检查任何像素触发了多少事件(尽管不是它触发了哪些事件),通过

fbq.getState().pixels[0].eventCount
Run Code Online (Sandbox Code Playgroud)

如果您想通过检查计数是否为零来确保只触发一次事件,这可能会有所帮助。

当您随后决定跟踪一个事件时,这将为所有像素触发。

要验证此发送,类似于以下内容

fbq('track', 'PageView');
Run Code Online (Sandbox Code Playgroud)

并检查两个像素的 eventCount 是否已增加。您也应该能够看到对两个像素的 http 请求也被触发(通过 Chrome 开发者工具上的网络选项卡)