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)即可捕获错误,并且仍然可以进行链接。