JavaScript可以判断Firefox中是否启用了Tracking Protection?

时间:2017-04-07 10:09:05

标签: javascript firefox google-analytics

因此,我决定尝试使用Google Optimize进行转换测试,并且像其他工具一样,它通过JavaScript交换内容。

为避免flickery行为,Google建议添加一个设置不透明度的脚本:0;对于整个页面,直到

  • 来自Google Analytics的回调到达表示页面修改已完成
  • 超时(默认为4000毫秒)。

回调依赖于analytics.js 来执行。

在Firefox中启用跟踪保护后,Google Analytics会被阻止,因此回拨永远不会到来。因此,跟踪保护功能的用户在每个页面加载时都会遇到4000毫秒的灰屏,等待来自GA的回调永远不会到来。这显然远远不可取。

现在,我想为已阻止Google Analytics的用户完全删除灰屏。但我没有任何运气可以提出一个条件,可以评估浏览器允许分析加载。有没有办法提前说出来?

解决方案无法基于检查来自analytics.js的代码或是否有超时,因为这些正是我试图规避的事情。

2 个答案:

答案 0 :(得分:2)

  

有没有办法提前说出来?

有点,但很尴尬。您需要向Tracking Protection阻止的域发出蜜罐请求,并查看它是否返回异常或空响应正文(某些阻止程序足够聪明,可以返回'空'广告/分析脚本)。如果是这样,您可以“早”告诉浏览器没有通过某些请求,并缩短渲染延迟。

您需要尽早调度此请求,以便其他请求(图像,广告资产,脚本)不会占用HTTP资源池并锁定您的请求及时完成(或失败)。

您还可以通过创建具有类似'.advert'的类的元素,将其插入DOM,并查看是否在帧的时间内给出display-none,以同步方式测试通用广告拦截器。这仍然是异步的,但它会更可靠。

但是,它仍然不理想,你可能会偶尔得到误报。涉及DOM更改的A / B测试应该从服务器端运行,而不是笨拙的侧载脚本。

答案 1 :(得分:1)

通过稍微修改您添加到网页的跟踪代码段以添加错误处理程序,您可以检测Google Analytics是否已被阻止或在其后无法使用。

a.async=1;之后的代码段中,添加a.onerror=i.gaFailedToLoad;或类似内容。这将导致功能window.gaFailedToLoad在完全阻止Google Analytics的情况下运行。

这不会在更高级的阻止程序上运行,例如uBlock Origin,它会用绝对版本替换分析请求。