【问题标题】:test if facebook pixel id loaded测试是否加载了 facebook 像素 ID
【发布时间】:2017-03-24 06:11:47
【问题描述】:

如果有人调用 facebook 函数:

fbq('init', <pixel_id>)

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

Facebook 像素错误:像素 ID 重复

this 答案的解决方案是先使用

if(typeof fbq === 'undefined') {
fbq('init', <pixel_id>)
}

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

有没有办法检查一个特定的 pixelid 是否被加载,而不仅仅是 fbq 是否被加载?类似:

if(typeof fbq === 'undefined') {
    fbq('init', <pixel_id>);
}
else {
    if (!fbq.pixel_id)
            fbq('init', <pixel_id>);
}

【问题讨论】:

    标签: facebook


    【解决方案1】:

    你应该可以使用

    fbq.getState().pixels[0] 
    

    识别已加载的像素。

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

    fbq('init', <pixel_id>);
    

    你应该能够看到你已经加载了 2 个像素

    fbq.getState().pixels.length
    

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

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

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

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

    fbq.getState().pixels[0].eventCount
    

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

    当您随后决定跟踪事件时,将针对所有像素触发该事件。

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

    fbq('track', 'PageView');
    

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

    【讨论】:

    • 意图很好,但代码示例遇到了 fbq 未定义但 'getState' 是的竞争条件。如果 FB 开始加载但未完成,则可能会发生这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2017-06-04
    相关资源
    最近更新 更多