Cách quyền sử dụng onbeforeunload
để khẳng định hướng đi là để chỉ trả về chuỗi của tin nhắn bạn muốn hiển thị. MDN has this to say.
Các chức năng nên gán một giá trị chuỗi đến tài sản của đối tượng Event returnValue và trả về chuỗi cùng
Vì vậy onbeforeunload
chức năng của bạn cho hành vi mà bạn yêu cầu sẽ chỉ được (giống như ràng buộc nó với jquery, đặc biệt là kể từ khi onbeforeunload không hỗ trợ nhiều người nghe sự kiện như các sự kiện khác làm)
window.onbeforeunload = function() {
return "Are you sure?";
};
Nhưng trớ trêu thay, Firefox không hỗ trợ này cho các mục đích an ninh.
Lưu ý rằng trong Firefox 4 trở lên, chuỗi trả về không được hiển thị cho người dùng. Xem bug 588292.
Chỉnh sửa: Tôi đọc thêm báo cáo lỗi. Lý do chính mà trang web của họ cho quyết định này là: "1. Xóa văn bản do trang web cung cấp, vì đây là vấn đề bảo mật (văn bản không đáng tin cậy trong hộp thoại trình duyệt)". Tôi tự hỏi họ cảm thấy thế nào về một số alert
?
Hầu hết các trình duyệt hiện đại (Chome, IE 9+ hoặc cũ hơn, và Opera, tôi biết chắc chắn) sẽ bỏ qua bất kỳ điều gì bạn cố thực hiện trong chức năng onbeforeunload
ngoài trả về chuỗi để hiển thị. Điều này nhằm ngăn chặn việc xâm nhập trình duyệt của người dùng, mở cửa sổ bật lên, ghi đè các nỗ lực điều hướng bằng cách trỏ người dùng khác, có thể là miền độc hại, v.v.
Chỉnh sửa 2: Tôi dường như không chính xác. Chỉ một số mọi thứ không được phép trong onbeforeunload
, chúng chỉ xảy ra chủ yếu là các loại nội dung bạn đã thử trong mã mẫu, phải thực hiện với tuyên truyền sự kiện và điều hướng trang.Từ deep in the comments của báo cáo lỗi FF đó, người dùng oyasumi đăng liên kết tới jsFiddle này bằng cách hiển thị văn bản tùy chỉnh cho người dùng FF 4+: http://jsfiddle.net/ecmanaut/hQ3AQ/ Vì vậy, dường như gọi alert()
vẫn được cho phép, ngay cả trong onbeforeunload
, là nguyên nhân ban đầu của lỗi "sửa lỗi": hiển thị văn bản tùy chỉnh trong hộp thoại trình duyệt/ứng dụng/HĐH/tìm kiếm chính thức.
Không thể. Việc có thể dừng điều hướng mà không có thao tác nhập của người dùng sẽ phá vỡ cách duyệt web hoạt động. – jbabey
Tôi có cùng cảm giác. Ví dụ trong Firefox, họ cố tình chặn ghi đè window.location.href vì lý do bảo mật. Xem [lỗi này trong bugzilla] (https://bugzilla.mozilla.org/show_bug.cgi?id=736694). – kamituel
Thực tế là có thể. Nếu không, các trang web yêu cầu bạn nếu bạn muốn "rời khỏi và mất các thay đổi" sẽ không tồn tại. Sự kiện beforeunload tồn tại và nó bắt ngay cả khi bạn đóng cửa sổ mà không cần lướt đi. – Alfabravo