javascript - Facebook Pixel Code 适用于 Chrome,但不适用于 Safari 或 Firefox
问题描述
我在网站上安装了 Facebook 像素。最初的实现是非常直接地在 facebook 提供的网站上添加代码。
<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', '<truncated-Pixel-ID>');
fbq('track', 'PageView');
</script>
但后来我想添加额外的功能,比如使用多个像素 - 一个用于 Stage,一个用于 Prod。自动检测页面是否由 Stage 或 Prod Server 交付并基于初始化所需的像素。以及延迟对“PageView”的调用并添加自定义事件、视频跟踪、潜在客户跟踪等功能。
我对 Facebook 像素代码的调用方式进行了细微更改,现在跟踪不适用于 Safari 和 Firefox。相同的代码仍然适用于 Chrome。
我在这里打破像素代码做错了什么:
!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');
if(servedByProd()){
fbq('init', '<Prod-Pixel-Id>');
console.log("Initializing FB Pixel for Prod server.");
} else {
fbq('init', '<Stage-Pixel-Id>');
console.log("Initializing FB Pixel for Stage server.");
}
function reportPageViewToFB(delayInMs){
if(typeof delayInMs !== 'undefined'){
setTimeout( function(){
fbq('track', 'PageView');
console.log("PageView reported to FB after delay (ms) " + delayInMs);
}, delayInMs );
} else {
fbq('track', 'PageView');
}
}
我在 onload() 方法中调用了 reportPageViewToFB(5000),我看到它在所有浏览器(包括 Safari 和 Firefox)中经过 5 秒后被触发。但是在 Facebook Pixel 的测试事件中,我没有看到它在尝试从 Safari 或 Firefox 进入时,它在 Chrome 上没有问题。
对于 Safari 和 Firefox,我触发的所有其他事件也都失败了。比如 Video Progress 或 Lead 等。
解决方案
推荐阅读
- python - Python - 元素的列表+元组长度
- java - 如果我提供可选的月份和日期,如何将字符串转换为有效的日期格式
- node.js - “MulterError:使用 AWS、Multer S3、NodeJS、Mongo 的 WrappedFileFilter 出现意外字段\n
- c - 这种 1 位单色 B&W bmp 图像的二进制表示有什么问题?
- terraform - Vault - 为一个身份组分配多个别名
- sql - 选择嵌套 json 数组字段包含 PostgreSQL 中提供的数组中的任何值的行?
- python - 从多个网络链接中抓取表格
- jpa - 在(Collection )方法中使用 JPA 规范时没有返回结果
- javascript - addEventListener 不转发参数
- c# - 通过脚本为 Light2D 设置动画