Javascript Facebook像素:按像素ID区分标准事件
我必须实现两个(新的)Facebook像素:一个站点范围,一个仅在特定页面上。请求者要求每个像素只跟踪其自身的关联标准事件 像素1: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
<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设计用于单个实例。我在这里发布了一个类似的问题: