如果在beforeunload事件处理程序中使用sendBeacon()方法不起作用,这可能是因为beforeunload事件的处理程序必须是同步的,并且sendBeacon()方法是异步的。
解决这个问题的一种方法是使用XMLHttpRequest对象来发送数据。您可以在beforeunload事件处理程序中创建一个新的XMLHttpRequest对象,然后使用该对象来发送数据。
以下是一个示例代码:
window.addEventListener('beforeunload', function(event) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/your-url', false); // 使用同步请求
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('data=your-data'); // 发送数据
});
在上面的代码中,我们创建一个XMLHttpRequest对象并使用open()方法指定请求的方法和URL。然后,我们使用setRequestHeader()方法设置请求头,并使用send()方法发送数据。
请注意,我们在open()方法的第三个参数中使用了false,这意味着该请求是同步的。这是必需的,因为在beforeunload事件处理程序中,我们需要确保数据已经发送完成,然后再关闭页面。
请将上述代码中的'/your-url'替换为您要发送数据的URL,并将'data=your-data'替换为您要发送的实际数据。
这样,您应该能够在beforeunload事件处理程序中成功发送数据。请记住,由于beforeunload事件处理程序是同步执行的,因此如果发送数据需要很长时间,可能会导致用户在关闭页面之前看到等待状态。