Ghostery 实现模拟脚本(代理),这样页面就不会在期望跟踪代码的逻辑上失败。
在我的例子中,我必须编写代码来跟踪 Assets 和出站点击。通常的做法是检查跟踪代码是否已加载(在我的例子中是 _gat
由 ga.js 公开),但如果使用代理,此检查将通过。
对于一些很好且符合预期的用例,但我们在这里处理链接。为了确保链接实际记录到 GA,我将一个函数推送到 _gaq,该函数(假设 ga.js 已正确加载)将被执行。
对于 Ghostery,情况并非如此。我得到的链接不会触发,因为带有 window.location.href = url
的函数不会被执行。
当我查看代理时,我发现它可以为我更改位置,但我必须执行 _gaq.push(['_link', url])
。
我发布了一个 issue并得到了开发人员不应将功能绑定(bind)到第三方脚本的回应。我明白了,这就是为什么在这样做之前我检查了 _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) 来捕获错误并且链接仍然有效。
关于javascript - 处理 Ghostery 代理人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22969297/