Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Facebook像素:按像素ID区分标准事件_Javascript_Facebook_Analytics - Fatal编程技术网

Javascript Facebook像素:按像素ID区分标准事件

Javascript Facebook像素:按像素ID区分标准事件,javascript,facebook,analytics,Javascript,Facebook,Analytics,我必须实现两个(新的)Facebook像素:一个站点范围,一个仅在特定页面上。请求者要求每个像素只跟踪其自身的关联标准事件 像素1: <script> !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loade

我必须实现两个(新的)Facebook像素:一个站点范围,一个仅在特定页面上。请求者要求每个像素只跟踪其自身的关联标准事件

像素1:

<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');

fbq('init', '111');
fbq('track', 'PageView');
fbq('track', 'ViewContent');
</script>
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');

fbq('init', '222');
fbq('track', 'PageView');
fbq('track', 'Lead');
</script>

!函数(f,b,e,v,n,t,s){if(f.fbq)返回;n=f.fbq=function(){n.callMethod?
n、 callMethod.apply(n,参数):n.queue.push(参数)};如果(!f._fbq)f._fbq=n;
n、 push=n;n.load=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t、 src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(窗口,
文档,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init','111');
fbq(“轨迹”、“页面视图”);
fbq(“轨迹”、“视图内容”);
像素2:

<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');

fbq('init', '111');
fbq('track', 'PageView');
fbq('track', 'ViewContent');
</script>
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');

fbq('init', '222');
fbq('track', 'PageView');
fbq('track', 'Lead');
</script>

!函数(f,b,e,v,n,t,s){if(f.fbq)返回;n=f.fbq=function(){n.callMethod?
n、 callMethod.apply(n,参数):n.queue.push(参数)};如果(!f._fbq)f._fbq=n;
n、 push=n;n.load=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t、 src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(窗口,
文档,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init','222');
fbq(“轨迹”、“页面视图”);
fbq(“跟踪”、“引导”);

像素1不应接收任何潜在客户跟踪数据,像素2不应接收任何ViewContent跟踪数据。我是如何做到这一点的?

我一直在为同样的问题苦苦挣扎,而Facebook似乎并不公开支持或记录这种功能。即使在许多情况下这可能是必要的

正如文章所示,您可以重写de fbq函数,将像素ID作为参数。然而,我想在不重写提供的fbq的情况下实现这一点:

以下是(非正统的)代码,说明了我是如何解决这个问题的:

function customFacebookTrack(id, eventName, object){


    // If i get an ID i Simply delete the remanent IDs from de FBQ object.
    if(typeof id != 'undefined' && id != 'ALL'){

        var placePixels = [];
        var currentPixels = fbq.getState().pixels;

        //console.log(currentPixels);
        for(i = 0; i < currentPixels.length; i++){
            if(currentPixels[i].id != id){
                placePixels.push(currentPixels[i]);
                currentPixels.splice(i, i + 1);
            }
        }       
    }   

    //console.log(currentPixels);
    // I send my event only with the pixel(s) I want
    fbq('trackCustom', eventName, object);

    // After sending the event I set back the deleted IDs for regular use. 
    if(typeof id != 'undefined' && id != 'ALL'){
        for(i = 0; i < placePixels.length; i++){
            if(placePixels[i].id != id){
                currentPixels.push(placePixels[i]);
                placePixels.splice(i, i + 1);
            }
        }
    }
}
函数customFacebookTrack(id、事件名、对象){
//如果我得到一个ID,我只需从de FBQ对象中删除剩余ID。
if(type of id!=“未定义”&&id!=“全部”){
var placePixels=[];
var currentPixels=fbq.getState().pixels;
//console.log(当前像素);
对于(i=0;i
请注意,无论如何这都不是推荐的做法。这只是Facebook事件跟踪javascript已知限制的一个变通方法

示例代码段:

<script>
    customFacebookTrack(XXXXXXXXXXXXXXX, 'Lead Form', {content_name:'Newsletter Subscriber'});
</script>

customFacebookTrack(xxxxxxxxxxxxx,'Lead Form',{内容名称:'Newsletter Subscriber'});

只需将这两个跟踪事件与所有初始像素ID放在一起即可

<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');

fbq('init', '111');
fbq('init', '222');
fbq('track', 'PageView');
fbq('track', 'ViewContent');
fbq('track', 'Lead');
</script>

!函数(f,b,e,v,n,t,s){if(f.fbq)返回;n=f.fbq=function(){n.callMethod?
n、 callMethod.apply(n,参数):n.queue.push(参数)};如果(!f._fbq)f._fbq=n;
n、 push=n;n.load=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t、 src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(窗口,
文档,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init','111');
fbq('init','222');
fbq(“轨迹”、“页面视图”);
fbq(“轨迹”、“视图内容”);
fbq(“跟踪”、“引导”);

我也有同样的问题。如果我在这两个像素中添加一个自定义事件(如Lead或ViewContent),我会在Facebook Pixel helper中得到一个错误,其中一个被多次调用。我认为这是不可能的,因为fbq对象在window对象上共享一个全局命名空间。据我所知,Facebook pixel设计用于单个实例。我在这里发布了一个类似的问题: