Ghostery实现了模拟脚本(代理),以使页面不会因期望跟踪代码的逻辑而失败。

就我而言,我必须编写代码来跟踪资产和出站点击。这样做的通常方法是检查跟踪代码是否已加载(在我的情况下是ga.js公开的_gat),但带有替代项,此检查将通过。

对于某些用例来说,这是可以预期的,但是我们在这里处理链接。为了确保实际将链接记录到GA,我将函数(_gaq已正确加载)推送到_gaq。

使用Ghostery并非如此。我得到的链接不会触发,因为使用window.location.href = url的函数将不会执行。

当我查看代理时,我发现它可以为我更改位置,但是我必须做_gaq.push(['_link', url])

我发布了issue并得到了答复,指出开发人员不应将功能绑定到第三方脚本。我明白了,这就是为什么在这样做之前我检查_gat是否存在的原因。

最后,我不得不为Ghostery制作一个特殊的案例,并附加他们的怪异推力,以使链接可以使用。

您可以在此gist中签出完整的实现。如果要重用它并与IE8兼容,请确保为String.trim()包括一个polyfill。

如何编写不以任何方式依赖跟踪代码的自定义跟踪逻辑?

使用timeout更改URL是不可能的,因为它可能会破坏慢速连接上的匹配。

另外,戳_gat对象也不是一种可靠的方法,因为依赖第三方脚本很不好。

最佳答案

Web浏览器当前正在构建可解决此问题的功能:
https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon

几个月后不会广泛实施,敬请期待。现在,只需添加setTimeout(function(){location.href = url},100)即可捕获错误,并且仍然可以进行链接。

10-08 00:20