Mới hơn các trình duyệt tốt hơn về việc giữ gìn các trang trước đã sẵn sàng để hiển thị khi bạn sử dụng nút back và về phía trước. Vì vậy, những gì có thể xảy ra là trình duyệt của bạn chỉ đơn thuần là hiển thị lại trang sau khi $("body").fadeOut(500, redirectPage);
hoàn tất việc thực thi. Tức là, trang được hiển thị sau khi bạn nhấp vào nút quay lại có kiểu body { display: none; }
được áp dụng.
Tôi không gặp sự cố khi điều hướng trang của bạn bằng Chrome "6.0.472.51 beta" bằng cách sử dụng các nút quay lại và tiến lên. Khi tôi sử dụng Firefox 3.5, tôi thấy vấn đề được mô tả khi sử dụng nút quay lại để quay lại trang chỉ mục. Sử dụng Firebug, tôi đã có thể xác nhận rằng phong cách của phần tử cơ thể đã được đặt thành display: none
.
Vì vậy, những gì bạn thấy là FireFox's bfcache giữ trang ở trạng thái trước đó, JavaScript và tất cả. Nếu bạn muốn Firefox kích hoạt lại mã mờ của mình, bạn có thể đính kèm nó vào sự kiện pageshow
của Firefox. Tương tự, WebKit có cơ chế pagecaching riêng của mình (điều này sẽ ảnh hưởng đến Safari và Chrome).
Cũng cần lưu ý rằng chức năng jQuery .ready()
là không giống như chức năng window.load()
. Xem documentation để biết thêm chi tiết. source code cho chức năng .ready()
cũng khá hữu ích.
Để tóm tắt: Mã được thực thi bởi $.ready()
được thực thi trước trang thực sự được hiển thị. Trong các trình duyệt mới hơn, khi bạn điều hướng khỏi một trang, rất có khả năng trình duyệt sẽ lưu trạng thái của trang đó chính xác như khi bạn rời khỏi trang đó. Do đó, khi bạn sử dụng nút quay lại của trình duyệt để quay lại trang, trang sẽ không được hiển thị lại. Đó là DOM sẽ không được xây dựng lại và chức năng $.ready()
sẽ không được kích hoạt lại. Nếu bạn có mã cần chạy mỗi khi trang được hiển thị , hãy hiển thị rồi đính kèm mã vào phương thức pageshow()
(nếu có).
Nguồn
2010-09-02 15:22:01
Có! Điều đó đã làm điều đó, cảm ơn bạn! – Rembrand