Đôi khi bạn có thể muốn cho máy chủ biết rằng người dùng đang rời khỏi trang. Điều này rất hữu ích, chẳng hạn, để xóa các hình ảnh chưa lưu được lưu trữ tạm thời trên máy chủ, để đánh dấu người dùng đó là "ngoại tuyến" hoặc để ghi lại khi họ hoàn thành phiên của mình.
Trước đây, bạn sẽ gửi một yêu cầu AJAX trong beforeunload
hàm, tuy nhiên điều này có hai vấn đề. Nếu bạn gửi một yêu cầu không đồng bộ, không có gì đảm bảo rằng yêu cầu sẽ được thực thi chính xác. Nếu bạn gửi một yêu cầu đồng bộ, nó đáng tin cậy hơn, nhưng trình duyệt sẽ bị treo cho đến khi yêu cầu hoàn tất. Nếu đây là một yêu cầu chậm, đây sẽ là một sự bất tiện rất lớn cho người dùng.
May mắn thay, bây giờ chúng tôi có navigator.sendBeacon()
. Bằng cách sử dụng sendBeacon()
phương pháp này, dữ liệu được truyền không đồng bộ đến máy chủ web khi Tác nhân người dùng có cơ hội làm như vậy, mà không làm chậm trễ việc tải hoặc ảnh hưởng đến hiệu suất của điều hướng tiếp theo. Điều này giải quyết tất cả các vấn đề với việc gửi dữ liệu phân tích: dữ liệu được gửi đáng tin cậy, được gửi không đồng bộ và nó không ảnh hưởng đến việc tải trang tiếp theo. Đây là một ví dụ về cách sử dụng của nó:
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()
được hỗ trợ trong:
- Cạnh 14
- Firefox 31
- Chrome 39
- Safari 11.1
- Opera 26
- iOS Safari 11.4
Nó hiện KHÔNG được hỗ trợ trong:
- trình duyệt web IE
- Opera Mini
Đây là một polyfill cho sendBeacon () trong trường hợp bạn cần thêm hỗ trợ cho các trình duyệt không được hỗ trợ. Nếu phương thức không khả dụng trong trình duyệt, nó sẽ gửi một yêu cầu AJAX đồng bộ để thay thế.