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