我需要向一堆页面添加代码,这些页面将在单击时监视链接并发送 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/