【问题标题】:How can i change Facebook PixelID without reloading a Single Page Application?如何在不重新加载单页应用程序的情况下更改 Facebook PixelID?
【发布时间】:2017-05-26 22:45:08
【问题描述】:

我正在为一个在不同国家/地区运营的国际电子商务项目工作。每个国家都是相互独立的。

我有一个单页应用程序 (SPA/Angular),每个国家/地区都有不同的跟踪像素,例如AT(奥地利)、DE(德国)、BE(比利时)、DK(丹麦),只有一个域名,例如www.example.co.uk。每个国家都想跟踪自己的数据。不允许向BE发送DE数据! (addPixelId 不是解决办法)

用户可以使用组合框更改国家/地区。我需要更改所选国家/地区的像素 ID。谷歌像素是可能的,但我还没有看到关于 Facebook 像素的任何文档。

我向Google Analytics TrackingID 提出了同样的问题,并找到了解决方案。但我目前还没有找到 Facebook PixelID 的解决方案。

如何在不重新加载单页应用程序的情况下更改 Facebook Pixel ID?

应用模型的屏幕截图:

【问题讨论】:

  • 嗨。您是否在项目中使用标签管理器工具(如 google 标签管理器或 Adob​​e 标签管理器)?基本上,如果您使用的是标签管理器,您可以创建一个国家和像素 ID 列表,并根据国家域站点控制加载像素。

标签: javascript facebook facebook-ads-api


【解决方案1】:

从技术上讲,没有官方支持的方式来做到这一点。

可以看看FB像素是怎么工作的,就是在window上定义名为fbq_fbq的方法,把这些重新定义为null然后重新调用具有新像素 ID 的像素代码。

这可能会起作用,但我不确定是否会有任何副作用。

假设您首先使用以下方法初始化了像素:

!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', 'PIXEL_ID_1'); // Insert your pixel ID here.
fbq('track', 'PageView');

现在您需要更改像素 ID。像素 ID 存储在上述像素代码定义的 fbq 方法内的函数范围变量中。

因此您需要重新定义此方法以删除像素 ID。

window.fbq = window._fbq = null;

然后您可以使用新 ID 重新调用整个像素代码:

!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', 'PIXEL_ID_2'); // Insert your 2nd pixel ID here.
fbq('track', 'PageView');

您应该使用 Facebook Pixel Helper for Chrome 来调试它。

【讨论】:

  • 一个实现一旦执行就不可能从浏览器内存中删除!
  • 什么意思?!您可以随时重新定义方法,并且像素的 ID 存储在这些方法中,因为它们是函数范围的。
  • @KorayGüclü - 我想你回答了你自己的问题,你必须先释放内存,这就是我说重新定义 fbq 的原因。查看更新的说明。
  • 感谢您的努力,但您建议的解决方案不起作用。一旦开始侦听 DOM 事件,就不可能使函数实现为空。您正在清空的引用不会对实现产生任何影响,因为它已经加载到浏览器内存中并从那里开始工作。因此,清空和重新启动 FB 不会有任何影响。
猜你喜欢
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 2020-04-20
  • 2020-10-04
  • 2014-07-21
相关资源
最近更新 更多