2013-05-30 40 views
8

Độ tin cậy của sự kiện window.onbeforeunload là bao nhiêu?Độ tin cậy của onbeforeunload

  1. Nó có kích hoạt trong tất cả các trình duyệt chính không?
  2. Nó có kích hoạt nếu trình duyệt của khách hàng gặp sự cố không? (Tôi tin vào điều kỳ diệu)
  3. Có thể trì hoãn sự kiện đóng trong trường hợp nó có thể cần "lâu hơn một chút" hay nó sẽ bị cắt bỏ?
  4. Có cách nào khác không?
+1

1-Có, 2-Không, 3-Không, nó phải trả về chuỗi đồng bộ hoặc nếu không quá trình tải tiếp tục, 4-Không, đó là cách duy nhất để có thể làm gián đoạn trang đang được tải. –

+0

cảm ơn bạn kolink! bạn có thể khai sáng cho tôi, tại sao bạn không đăng bài này như một câu trả lời mà tôi có thể chấp nhận? (Tôi là loại mới với điều này toàn bộ stackoverflow điều) –

+0

Tôi đã hoàn toàn mong đợi câu hỏi này được đóng cửa là vô ích. Rõ ràng đó chỉ là tôi! Tôi sẽ tiếp tục và làm cho nó một câu trả lời. –

Trả lời

10
  1. Có, onbeforeunload hoạt động trên mọi trình duyệt mà tôi từng thử.
  2. Không, nếu trình duyệt bị treo thì nó sẽ chết, không có cách nào xung quanh sự thật đó.
  3. Tôi đã nói "không" trong nhận xét của mình, nhưng nó phụ thuộc phần nào. Ví dụ, nếu bạn có một vòng lặp thực sự dài, nó sẽ thực hiện đầy đủ trước khi đóng trang. Tuy nhiên, bạn không thể sử dụng AJAX hoặc bất kỳ chức năng không đồng bộ nào khác như setTimeout trong trình xử lý. Nó PHẢI trả về một chuỗi theo cách đồng bộ để chặn dỡ.
  4. Một lần nữa, tôi đã nói "không" trong nhận xét của mình, nhưng tôi có thể xây dựng thêm. Nếu bạn đính kèm trình xử lý sự kiện vào trang của mình để phát hiện nhấp chuột vào liên kết, bạn có thể gọi thủ công onbeforeunload để nhận phản hồi chuỗi và sử dụng để hiển thị hộp xác nhận tùy chỉnh, hủy sự kiện nhấp khi bạn làm như vậy. Lưu ý rằng điều này sẽ không ảnh hưởng đến các nút tải lại, Quay lại, Chuyển tiếp hoặc Đóng, chỉ nhấp vào một liên kết đến một trang mới. Bạn cũng nên cẩn thận để không ảnh hưởng đến các liên kết đến các neo trên cùng một trang hoặc các liên kết loại javascript:void(null);. Điều này cũng sẽ cho phép bạn thực hiện các yêu cầu AJAX và nếu người dùng xác nhận muốn rời khỏi trang, bạn có thể thực hiện một số việc trước khi tải trang mới.

    Ngắn câu chuyện, có một số lựa chọn thay thế trong một số trường hợp, nhưng tất cả bắt nguồn từ sự kiện onbeforeunload và có thể khá phức tạp.

Các vấn đề liên quan