Javascript 如何在点击链接时可靠地发送跟踪事件?

Javascript 如何在点击链接时可靠地发送跟踪事件?,javascript,Javascript,我有一个跟踪事件(以对跟踪服务器的http调用的形式),在点击链接时触发,由onclick事件触发 但是,跟踪服务器似乎经常不注册事件,因为浏览器在加载新页面时会切断(长时间运行的)事件调用 在将用户转发到新页面之前,我不愿意等待回复,以防回复延迟,用户不得不等待 是否有办法确保事件调用完成并立即转发用户 也许preventDefault能帮助你。你不分享你的代码,因为我这样解释你: $('a.link').on('click', function(e) { e.preventDe

我有一个跟踪事件(以对跟踪服务器的http调用的形式),在点击链接时触发,由onclick事件触发

但是,跟踪服务器似乎经常不注册事件,因为浏览器在加载新页面时会切断(长时间运行的)事件调用

在将用户转发到新页面之前,我不愿意等待回复,以防回复延迟,用户不得不等待


是否有办法确保事件调用完成并立即转发用户

也许
preventDefault
能帮助你。你不分享你的代码,因为我这样解释你:

 $('a.link').on('click', function(e) {

     e.preventDefault();
     var trackingLink = $(this).attr('href');
     // do ajax stuff
     $.ajax().success(function() {
          window.location.href = trackingLink;
     });

 });

使用
preventDefault()
可以避免加载页面的链接,然后发出ajax请求,如果成功,则重定向到链接的页面一个选项是结束“卸载”事件处理程序,并将数据发送给处理程序。这将延迟页面的卸载

例如:

$(window).on('unload', function() {
    $.ajax({
      method: "POST",
      url: "serverUrl",
      data: { logData: '....' }
    })
});
也许您可以使用
.sendBeacon
方法。目前只有Chrome和Firefox支持,但中的描述似乎适合您的需要:

此方法解决了以下分析和诊断代码的需求: 通常在卸载之前尝试将数据发送到web服务器 该文件的附件

示例(来自MDN文章):


不。甚至没有一种方法可以确保进行事件调用。用户可以直接转到下一页而不通知跟踪事件。请尝试共享代码。虽然,如果您在提交表单时只
返回true
,它可能会“等待”事件。否则,您可能必须使用一些httprequest或ajax。我看不出在加载另一个页面后如何跟踪事件。
window.addEventListener('unload', logData, false);

function logData() {
    navigator.sendBeacon("/log", analyticsData);
}