Ghostery实现了模拟脚本(代理),以便页面不会因为需要跟踪代码的逻辑而失败。
在我的情况下,我必须编写跟踪资产和出站点击的代码。通常的方法是检查跟踪代码是否已加载(在我的情况下是由ga.js公开的_gat
)但是代理人会通过此检查。
对于某些用例很好且预期但我们在这里处理链接。为了确保链接实际记录到GA,我将一个函数推送到_gaq(假设ga.js正确加载)将被执行。
Ghostery并非如此。我得到了不会触发的链接,因为window.location.href = url
的函数不会被执行。
当我看到代理人时,我发现它可以改变我的位置,但我必须_gaq.push(['_link', url])
。
我发布了一个issue并得到了一个响应,开发人员不应该将功能绑定到第三方脚本。我明白这就是为什么在这之前我检查了_gat
是否存在。
最后,我不得不为Ghostery做一个特例,并附上他们的嘶嘶声,以便与它合作。
您可以查看此gist中的完整实施。如果您想重复使用它并与IE8兼容,请确保包含String.trim()
的polyfill。
我应该如何编写不依赖于跟踪代码的自定义跟踪逻辑?
使用timeout
更改网址是不可能的,因为它可能会破坏慢速连接上的点击。
另外,戳_gat
对象不是一种可靠的方法,因为依赖第三方脚本是不好的。
答案 0 :(得分:1)
Web浏览器目前正在构建一个可以解决此问题的功能: https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon
这种情况在几个月内没有得到广泛实施,敬请关注。现在,只需添加一个setTimeout(function(){location.href = url},100)来捕获错误并仍然可以使用链接。