javascript - 处理 Ghostery 代理人

标签 javascript jquery google-analytics

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/

相关文章:

android - Fancybox:无法在 Android 手机上滚动

jquery 图像标题

php - 页面 View 访问路径报告在 COBUB RAZOR 中始终显示 "no data"

javascript - AMP 客户端 ID 错误

javascript - ngClass : Check if input has value with angular

javascript - jquery 组合链接 何时完成 何时完成 等等...何时

javascript - 如何处理一组以上的单选按钮组 - reactjs

javascript - 如何在 Electron 的 Node 通知程序中删除 SnoreToast

javascript - Firefox 插件内的网站

google-analytics - GA Tracking ID 中的正式名称 "UA"是什么?