我正在尝试将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插件。他们似乎都没有提到这一点。
答案 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组件:
页面跟踪由角度测量仪自动执行,因此您无需关心它。
npm install angulartics-facebook-pixel
然后添加angulartics.facebook.pixel作为您应用的依赖项:
require('angulartics')
angular.module('myApp', [
'angulartics',
require('angulartics-facebook-pixel')
]);
另见:https://github.com/angulartics/angulartics
我希望它有所帮助。