2012-02-22 23 views
5

Các ý chính sau: https://gist.github.com/1876791 (mượn từ bản demo trong this question) là một ví dụ đơn giản chết của việc sử dụng của window.onbeforeunload trong js.Safari vẫn "bốc" khi window.onbeforeunload trả về false

Vấn đề chúng tôi có như sau (xảy ra với Safari 5.1.3 và không mới nhất phiên bản Chrome):

  1. Truy cập trang này: http://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm
  2. Bấm vào một trong các liên kết, bạn sẽ nhận được thông báo hỏi bạn có thực sự muốn rời khỏi trang này
  3. Nhấp vào "Ở lại trang"
  4. Tải lại trang bằng cách sử dụng cmd-R. Bạn sẽ được hỏi một lần khác nếu bạn thực sự muốn rời khỏi trang
  5. Nhấp vào "Ở lại trang".
  6. Safari vẫn ở trạng thái "đang tải", với thanh tiến trình hiển thị như thể nó đang tải trang tiếp theo.

Đây có phải là lỗi từ Safari không? Có cách nào để vượt qua vấn đề này không?

+0

Thật kỳ lạ, bởi vì ngay cả khi cố gắng window.stop() sẽ không làm cho Safari ngừng giả vờ làm mới trang. Tôi đoán đó là một lỗi, hãy thử báo cáo cho [webkit guys] (http://www.webkit.org/quality/reporting.html) – Roberto

+0

Điều đó cũng xảy ra nếu tôi làm mới nhiều lần.Tôi không cần phải bấm vào một trong các liên kết. Tôi đang chạy Safari 5.1.2 trên máy tính. –

Trả lời

1

Tôi đã có thể tạo lại vấn đề này ngay cả khi bỏ qua các bước của OP 2 và 3. Mọi hình thức tải lại đều thể hiện vấn đề này. Các bước tối giản để tái sản xuất:

  1. Ghé thăm the page in question.
  2. Lượt tải lại.
  3. Nhấp vào nút "Ở lại trang".

Tiến trình tải được trực quan trước khi tải lại và lưu lại như vậy cho toàn bộ vòng đời của hộp thoại xác nhận (rõ ràng trong nỗ lực giao tiếp "treo trên cạnh vách đá" -type trưởng thành của tình huống ;) Tuy nhiên:

  • Khi hộp thoại đó bị với nút "Stay trên trang", nó rời khỏi dừng X biểu tượng trên và tiến trình tải vẫn tham gia và đông lạnh ở đâu đó khoảng 10% dấu.
  • Không thể hủy "tải" này bằng bất kỳ phương tiện nào (bàn phím, nút, tập lệnh).
  • Tab mạng trong Trình theo dõi web xác nhận KHÔNG tải xảy ra.

Điều này thực sự trông giống như lỗi giao diện người dùng Webkit/Safari - có vẻ như không giải phóng thanh tiến trình trong điều kiện lưu trú. Tốt nhất là báo cáo cho số Webkit team hoặc vì bạn trải nghiệm điều này trong Safari, có lẽ Safari team sẽ tốt hơn.

0

Vui lòng xem trang này->https://developer.mozilla.org/en/DOM/window.onbeforeunload

Bạn phải xử lý sự kiện. Ví dụ tại trang đang hoạt động tốt. Đây là mã:

window.onbeforeunload = function (e) { 
    e = e || window.event; 

    // For IE and Firefox prior to version 4 
    if (e) { 
    e.returnValue = 'Any string'; 
    } 

    // For Safari 
    return 'Any string'; 
}; 
+0

Tôi đã nghi ngờ về câu trả lời của bạn ngay từ đầu. Sau đó, tôi nghĩ rằng việc thêm '(e)' thay vì '()' sẽ hoạt động. Nhưng trang chính xác này https://gist.github.com/1960398 (lấy chính xác mã js của bạn) đang hiển thị lỗi mà tôi đang nói đến trong câu hỏi của tôi. – rpechayr

+0

nó không phải là 'mã js của tôi'. Tôi đã cung cấp nguồn như một liên kết ở đó nếu bạn có thể kiểm tra nó. – zipizip

+0

Có, tôi cũng đã xem qua mã này. Xin lỗi vì bình luận của tôi không rõ lắm. – rpechayr

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