Javascript 如何在不重新加载单个页面应用程序的情况下更改Facebook PixelID?

Javascript 如何在不重新加载单个页面应用程序的情况下更改Facebook PixelID?,javascript,facebook,facebook-ads-api,Javascript,Facebook,Facebook Ads Api,我正在为一个国际电子商务项目工作,该项目在不同的国家运作。每个国家都是相互独立的 我有一个单页应用程序(SPA/Angular),每个国家都有不同的跟踪像素,例如奥地利、德国、比利时、丹麦,只有一个域,例如www.example.co.uk。每个国家都希望跟踪自己的数据。不允许发送要删除的DE数据!(addPixelId不是解决方案) 用户可以使用组合框更改国家/地区。我需要更改所选国家/地区的像素ID。google pixel也可以,但我还没有看到关于faceboook pixel的任何文档

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

我有一个单页应用程序(SPA/Angular),每个国家都有不同的跟踪像素,例如奥地利、德国、比利时、丹麦,只有一个域,例如www.example.co.uk。每个国家都希望跟踪自己的数据。不允许发送要删除的DE数据!(addPixelId不是解决方案)

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

我问了同样的问题,并找到了解决办法。但我目前还无法找到Facebook PixelID的解决方案

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

应用程序模型的屏幕截图:

从技术上讲,没有一种官方支持的方法可以做到这一点

您可以查看FB像素的工作原理,即在
窗口
上定义名为
fbq
\u fbq
的方法,将它们重新定义为
null
,然后使用新的像素ID重新调用像素代码

window.fbq = window._fbq = null;
这可能会起作用,但我不确定是否会有任何副作用

假设您首先使用如下方式初始化像素:

!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像素浏览器来调试这个

从技术上讲,没有一种官方支持的方法可以做到这一点

您可以查看FB像素的工作原理,即在
窗口
上定义名为
fbq
\u fbq
的方法,将它们重新定义为
null
,然后使用新的像素ID重新调用像素代码

window.fbq = window._fbq = null;
这可能会起作用,但我不确定是否会有任何副作用

假设您首先使用如下方式初始化像素:

!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像素浏览器来调试这个

嗨。您是否在项目中使用标记管理器工具(如google标记管理器或Adobe标记管理器)?基本上,如果您使用的是标签管理器,您可以根据国家/地区域站点创建一个国家/地区和像素id列表,并控制加载像素。您好。您是否在项目中使用标记管理器工具(如google标记管理器或Adobe标记管理器)?基本上,如果您使用的是标记管理器,则可以根据国家/地区域站点创建国家/地区和像素id列表,并控制加载像素。一旦执行,就无法从浏览器内存中删除实现!。你什么意思?你可以随时重新定义方法,像素的ID存储在这些方法中,因为它们是函数作用域。@KorayGüclü-我想你回答了你自己的问题,你必须先释放内存,这就是为什么我说要重新定义fbq。请参阅更新的说明。感谢您的努力,但您建议的解决方案无效。函数实现一旦开始侦听DOM事件,就不可能为其设置空值。您正在清空的引用将不会对实现产生任何影响,因为它已加载到浏览器内存中并从那里开始工作。因此,清空和重新初始化FB不会产生任何影响。一旦执行了实现,就无法从浏览器内存中删除它!。你什么意思?你可以随时重新定义方法,像素的ID存储在这些方法中,因为它们是函数作用域。@KorayGüclü-我想你回答了你自己的问题,你必须先释放内存,这就是为什么我说要重新定义fbq。请参阅更新的说明。感谢您的努力,但您建议的解决方案无效。函数实现一旦开始侦听DOM事件,就不可能为其设置空值。您正在清空的引用不会对实现产生任何影响,因为它已加载到浏览器内存中并从那里开始工作。因此,清空并重新初始化FB不会产生任何影响。