javascript - Google Analytics 和omnature 如何在链接点击时进行ajax 调用并仍然跟踪链接

标签 javascript ajax google-analytics adobe-analytics

我需要向一堆页面添加代码,这些页面将在单击时监视链接并发送 ajax 请求。

对 Ajax 调用的响应不相关或不需要,但我需要能够可靠地发送它,然后允许链接或按钮,只执行之前要做的事情。

我知道这是由 Omniture 和 Google 分析代码完成的,但在研究了这两个 JavaScript 库后,我似乎无法弄清楚。

有人知道这些人如何处理这个问题吗?

谢谢。

编辑:

上下文:我需要这样做的原因是,当单击链接时,我在许多不同的页面上添加对自定义 API 的调用(实际链接是与 CMS 输入匹配的文本,因此我真的不知道它是什么)。它将通过多种方法来实现许多代码库的链接和按钮的功能。有时然后会有自己的 JS 事件,有时 onclick 处理程序,有时是同一窗口的 native 链接,有时是一个新窗口...重点是,无论单击做什么...我正在输入如果我尝试取消并重新启动它,痛苦的世界。我不会,也不能控制这些代码库,而且我的方法必须非常不具有干扰性。我的想法是,我需要在单击监听器上发出调用,而不执行 e.preventDefault()return false 因为这可能会破坏页面的预期功能。

我想过进行同步 ajax 调用,但它看起来很脏。并且它已被弃用。我真的想避免这种情况。我知道 Omniture 增加了 500 毫秒的延迟,但我不知道他们是如何做到的。

最佳答案

如果我的问题正确,那么您正在寻找可以发送请求而不阻塞页面导航的东西。

如果是,那么您可能正在寻找这个:

https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon

如果不支持发送信标方法:您应该使用 img 来完成工作。阅读文章的描述部分。

更多详细信息和示例可以在这里找到:

https://www.w3.org/TR/beacon/#sec-sendBeacon-method

<html>
<script>
  // emit non-blocking beacon to record client-side event
  function reportEvent(event) {
    var data = JSON.stringify({
      event: event,
      time: performance.now()
    });
    navigator.sendBeacon('/collector', data);
  }

  // emit non-blocking beacon with session analytics as the page
  // transitions to background state (Page Visibility API)
  document.addEventListener('visibilitychange', function() {
    if (document.visiblityState === 'hidden') {
      var sessionData = buildSessionReport();
      navigator.sendBeacon('/collector', sessionData);
    }
  });
</script>

<body>
 <a href='http://www.w3.org/' onclick='reportEvent(this)'>
 <button onclick="reportEvent('some event')">Click me</button>
</body>
</html>

关于javascript - Google Analytics 和omnature 如何在链接点击时进行ajax 调用并仍然跟踪链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45943788/

相关文章:

c# - 一旦用户上线进行 Metro 应用,如何将本地存储的用户操作(页面浏览量、事件等)推送到 Google 分析?

ios - Firebase Analytics 符合 iOS 14.5 上的 ATT

javascript - 如何使用localStorage存储用户id

javascript - 正则表达式匹配正斜杠或反斜杠

javascript - Google Maps Javascript Api V3 data.remove 没有删除功能

javascript - 如何递归获取所有子集合的集合?

ajax - 通过 Ajax 使用 kaminari 进行多页分页

javascript - 使用 XMLHttpRequest 和 FileReader whyle 设置自定义内容类型和边界上传二进制文件

javascript - 为什么我应该在单元测试中模拟 HTTP 请求?

asp.net - 如何使用ajax重置asp.net session ?