如何重定向 *after* 删除 facebook 跟踪像素(或类似像素)
How to redirect *after* dropping a facebook tracking pixel (or similar)
试图弄清楚如何在删除 Facebook 重定向像素后重定向到新页面。
我们已经设置了所有其他内容,但想添加此功能(与 https://meteor.link/ 相同)
我们目前使用 window.location.replace('https://thelinkgoeshere.com');
但我认为 Facebook 是异步的,所以我们不能只在其上面添加像素代码。
感谢您提供的任何帮助!
如果您仔细查看 Facebook 像素代码,您会注意到在该代码的某处,像素插入的动态 script
标签具有 async
属性像这样设置为 true
:
t.async=!0;
!0
的计算结果为 true
.
要更改此行为,请找到此 属性 在像素中的设置位置,并将其更改为 false:
t.async=false;
通常不建议这样做,因为关闭 async
将阻止进一步执行,直到脚本被加载和执行,但在您的情况下,这正是您所需要的。
一旦将async
设置为false,FB pixel JS代码将保证在下一个脚本之前加载和 运行像素:
<script>
// FB pixel here with async false
</script>
<script>
window.location.replace('https://thelinkgoeshere.com');
<script>
您可以修改放在页面上的 facebook 像素脚本
!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', '111......1');
fbq('track', 'PageView');
//add your redirect here
window.location.replace('https://thelinkgoeshere.com');
目前的答案还不够切题!
的确,重定向会等到 fbevents.js 加载完毕。但是,它不会等待发送 fbq 事件,这正是您希望从此解决方案中得到的结果。
这里有两个例子,说明 Chrome 如何在极慢的连接和 3G 上处理你的提议:
在第一个示例中,Facebook 甚至没有时间在重定向之前发起跟踪请求。在第二个示例中,它确实启动了它,但是 Chrome 取消了跟踪,因为等待重定向。
如果 Facebook 像 Google Analytics 那样提供回调,那将很容易,但截至撰写本文时,它目前不提供回调功能。
Web 上有很多解决方案,它们仅使用固定的 setTimeout 在一秒钟后重定向。但是这个解决方案带来了两种问题:
- 当连接比预期慢得多时它不起作用。在这种情况下,重定向仍将发生在轨道之前。所以你会丢失数据!
- 它强制快速连接的用户在重定向之前等待您的任意计时器通过!
尽管要达到预期效果,您可以做的是完全 Hack,如果 Facebook 最终实现回调,我会很高兴,所以请谨慎使用:
注意:我为此使用了两个库(jQuery 和 imagesLoaded)。没有这些你可能也能做到,但我选择了简单的路线并且不介意那么多的开销。
<html>
<head>
// Header Stuff
<script>
// Regular Facebook Pixel Code (Does not need to be modified with async!)
</script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.min.js"></script>
</head>
<body>
<!-- You should provide a Fallback Button here in case automatic redirect fails! -->
<img id="pixelLoad" src="https://www.facebook.com/tr/">
<script>
$(function()
{
$("#pixelLoad").imagesLoaded().done(function(inst)
{
setTimeout(function(){ window.location.href='someURL'; },100);
});
});
</script>
</body>
这会从他们的 fbq 方法中使用的 Facebook 加载准确的跟踪图像,从而可以补偿与 Facebook 服务器的缓慢连接。遗憾的是,您必须使用图像并且不能使用简单的 AJAX 请求,因为 Facebook 的 Origin-Policy 不允许这样做。
下面是一个示例,说明 Chrome 如何在更改后处理重定向和 Facebook 像素请求:
这似乎允许浏览器正确地排队重定向,所以它发生在像素跟踪事件之后。我没有在旧版浏览器上尝试过,所以我要重复一遍:使用此代码时请谨慎!
编辑:
Edge 和 Firefox 表现出相似的行为,这个解决方案似乎也适用于它们。
您是否考虑过使用 Google 跟踪代码管理器?
它可以让您更好地控制脚本的加载方式。此外,您可以在标签管理器中创建脚本,以便在 FB one 触发后进行重定向。
这正是我设置我所遵循的:
如前所述,JS 代码将不起作用,因为在页面重定向之前不一定会跟踪事件。如果您不想添加 flakey 超时,您可以做的最好的事情就是依靠后备像素 img
标签。
这是我的代码:
<html>
<body>
Please wait...
<br>
If you don't get redirected, click <a href="https://....">here</a>.
<script>
var img = document.createElement('img');
var redirectFunction = function () {
window.location = "https://....";
};
img.onload = redirectFunction;
img.onerror = redirectFunction;
document.body.appendChild(img);
img.src = "https://www.facebook.com/tr?id=PIXEL_ID&ev=PageView&noscript=1";
</script>
</body>
</html>
Pro-tip:您可能希望在此页面上添加 <meta property="og...
标签,以便在 Facebook 上分享时显示标题和预览图像。
试图弄清楚如何在删除 Facebook 重定向像素后重定向到新页面。
我们已经设置了所有其他内容,但想添加此功能(与 https://meteor.link/ 相同)
我们目前使用 window.location.replace('https://thelinkgoeshere.com');
但我认为 Facebook 是异步的,所以我们不能只在其上面添加像素代码。
感谢您提供的任何帮助!
如果您仔细查看 Facebook 像素代码,您会注意到在该代码的某处,像素插入的动态 script
标签具有 async
属性像这样设置为 true
:
t.async=!0;
!0
的计算结果为 true
.
要更改此行为,请找到此 属性 在像素中的设置位置,并将其更改为 false:
t.async=false;
通常不建议这样做,因为关闭 async
将阻止进一步执行,直到脚本被加载和执行,但在您的情况下,这正是您所需要的。
一旦将async
设置为false,FB pixel JS代码将保证在下一个脚本之前加载和 运行像素:
<script>
// FB pixel here with async false
</script>
<script>
window.location.replace('https://thelinkgoeshere.com');
<script>
您可以修改放在页面上的 facebook 像素脚本
!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', '111......1');
fbq('track', 'PageView');
//add your redirect here
window.location.replace('https://thelinkgoeshere.com');
目前的答案还不够切题!
的确,重定向会等到 fbevents.js 加载完毕。但是,它不会等待发送 fbq 事件,这正是您希望从此解决方案中得到的结果。
这里有两个例子,说明 Chrome 如何在极慢的连接和 3G 上处理你的提议:
在第一个示例中,Facebook 甚至没有时间在重定向之前发起跟踪请求。在第二个示例中,它确实启动了它,但是 Chrome 取消了跟踪,因为等待重定向。
如果 Facebook 像 Google Analytics 那样提供回调,那将很容易,但截至撰写本文时,它目前不提供回调功能。
Web 上有很多解决方案,它们仅使用固定的 setTimeout 在一秒钟后重定向。但是这个解决方案带来了两种问题:
- 当连接比预期慢得多时它不起作用。在这种情况下,重定向仍将发生在轨道之前。所以你会丢失数据!
- 它强制快速连接的用户在重定向之前等待您的任意计时器通过!
尽管要达到预期效果,您可以做的是完全 Hack,如果 Facebook 最终实现回调,我会很高兴,所以请谨慎使用:
注意:我为此使用了两个库(jQuery 和 imagesLoaded)。没有这些你可能也能做到,但我选择了简单的路线并且不介意那么多的开销。
<html>
<head>
// Header Stuff
<script>
// Regular Facebook Pixel Code (Does not need to be modified with async!)
</script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script src="https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.min.js"></script>
</head>
<body>
<!-- You should provide a Fallback Button here in case automatic redirect fails! -->
<img id="pixelLoad" src="https://www.facebook.com/tr/">
<script>
$(function()
{
$("#pixelLoad").imagesLoaded().done(function(inst)
{
setTimeout(function(){ window.location.href='someURL'; },100);
});
});
</script>
</body>
这会从他们的 fbq 方法中使用的 Facebook 加载准确的跟踪图像,从而可以补偿与 Facebook 服务器的缓慢连接。遗憾的是,您必须使用图像并且不能使用简单的 AJAX 请求,因为 Facebook 的 Origin-Policy 不允许这样做。
下面是一个示例,说明 Chrome 如何在更改后处理重定向和 Facebook 像素请求:
这似乎允许浏览器正确地排队重定向,所以它发生在像素跟踪事件之后。我没有在旧版浏览器上尝试过,所以我要重复一遍:使用此代码时请谨慎!
编辑: Edge 和 Firefox 表现出相似的行为,这个解决方案似乎也适用于它们。
您是否考虑过使用 Google 跟踪代码管理器?
它可以让您更好地控制脚本的加载方式。此外,您可以在标签管理器中创建脚本,以便在 FB one 触发后进行重定向。
这正是我设置我所遵循的:
如前所述,JS 代码将不起作用,因为在页面重定向之前不一定会跟踪事件。如果您不想添加 flakey 超时,您可以做的最好的事情就是依靠后备像素 img
标签。
这是我的代码:
<html>
<body>
Please wait...
<br>
If you don't get redirected, click <a href="https://....">here</a>.
<script>
var img = document.createElement('img');
var redirectFunction = function () {
window.location = "https://....";
};
img.onload = redirectFunction;
img.onerror = redirectFunction;
document.body.appendChild(img);
img.src = "https://www.facebook.com/tr?id=PIXEL_ID&ev=PageView&noscript=1";
</script>
</body>
</html>
Pro-tip:您可能希望在此页面上添加 <meta property="og...
标签,以便在 Facebook 上分享时显示标题和预览图像。