Facebook Pixel隐含的PageView

时间:2016-04-11 20:53:20

标签: facebook-pixel

我正在尝试将Facebook Pixel跟踪添加到我的Angular应用程序中。

作为第一步,我只是将基本的Facebook像素代码添加到我的一个基本html文件中,如下所示:

!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', '1234567890');,就会隐式发送PageView事件。

虽然我可以看到这对于普通的标准应用程序有点用处,但在处理像Angular这样的框架时,这是一种不受欢迎的行为,它的URL结构不能被fbq很好地处理。例如。 www.hi.com/#/hello注册为www.hi.com

有没有人遇到过这个问题,或者找到了将Facebook Pixel与Angular集成的更好方法?我已经看过几个提到Angular和FBQ的例子,还有一个有点过时的Angular插件。他们似乎都没有提到这一点。

2 个答案:

答案 0 :(得分:7)

看起来Facebook像素会侦听浏览器历史记录API的pushState()方法并自动跟踪PageView事件。

您可以通过在disablePushState对象中将true参数设置为fbq来停用此功能。

所以代码看起来像这样:

!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', '1234567890');
fbq.disablePushState = true;

之后,您可以在代码中手动使用Angulartics Facebook Pixel plugin或致电window.fbq('track', 'PageView');

请注意,这是一种未记录的方法,不能保证将来有效!希望Facebook将来会提供一些记录的方法来实现这一目标。积分转到此blog post from "Josh"

2017年7月更新。这已在Facebook的博客中得到解决,所以我猜它得到官方支持:Tagging Single Page Applications with the Facebook Pixel

答案 1 :(得分:1)

如果你想使用FB像素跟踪我建议你使用angularjs组件:

angulatrics facebook pixel

页面跟踪由角度测量仪自动执行,因此您无需关心它。

npm install angulartics-facebook-pixel

然后添加angulartics.facebook.pixel作为您应用的依赖项:

require('angulartics')

angular.module('myApp', [
  'angulartics', 
  require('angulartics-facebook-pixel')
]);

另见:https://github.com/angulartics/angulartics

我希望它有所帮助。