Trong một ứng dụng web Java/SpringMVC/JSP/jQuery chuẩn, tôi đang cố gắng phát hiện sự kiện "Quay lại" (hoặc history.go (-1)), để làm mới (AJAX) một thành phần/bảng tóm tắt nội dung khi tôi quay lại trang (nơi chúng tôi có thể thay đổi dữ liệu phụ trợ được hiển thị bởi thành phần tóm tắt).JavaScript - sự kiện bfcache/pageshow - event.persisted luôn đặt thành false?
Tôi đã thử các sau đây trong JavaScript (sau đây một số bài viết trên StackExchange lại làm thế nào để đạt được điều này):
<script type="text/javascript">
$(document).ready(function() {
window.onpageshow = function(event) {
console.log("Event:");
console.dir(event);
if (event.persisted) {
alert("non-jQuery - back to page - loaded from bfcache");
} else {
alert("non-jQuery - loaded page from server");
}
};
$(window).on("pageshow", function(event){
console.log("Event:");
console.dir(event);
if (event.originalEvent.persisted) {
alert("jquery - back to page - loaded from bfcache");
} else {
alert("jquery - loaded page from server");
}
});
});
</script>
Tôi đang chạy OpenSUSE Linux và đã thử điều này với FireFox và Chrome (phiên bản mới nhất), nhưng mỗi thời gian thuộc tính của sự kiện là persisted
được đặt thành false
(Tôi có thể thấy điều này trong bảng điều khiển JavaScript và bằng thông báo bật lên từ mã trên). Bởi mỗi lần, tôi có nghĩa là, bất kể cho dù nó đã được tải từ máy chủ hoặc hiển thị một lần nữa thông qua nút Back (hoặc một 'Back' liên kết).
Ý định của tôi là thực hiện cuộc gọi AJAX để tải lại thành phần/bảng tóm tắt với dữ liệu cập nhật từ máy chủ nếu trang hiển thị qua nút Quay lại hoặc gọi history.go(-1)
.
Tôi cũng đã cố gắng thiết lập một handler dỡ bỏ (mà không làm gì) để ngăn không cho trang khỏi bị đưa vào bfcache nhưng nó vẫn dường như được thể hiện một phiên bản bf-cache và event.persisted
(hoặc event.originalEvent.persisted
) được thiết lập để false
.
Tài sản này có được quản lý chính xác trên Linux không? Tôi đang làm điều gì đó ngu ngốc trong mã của tôi? Bất kỳ trợ giúp hoặc ý tưởng nào sẽ được đánh giá cao, cảm ơn!
Tôi không nghĩ rằng điều này liên quan đến Linux. Tôi đang chạy vào nó trên một máy Mac chạy hệ điều hành 10.9 Mavericks với cả Safari 7 và Firefox 26. Tôi đã thử mọi kỹ thuật tôi có thể tìm thấy, bao gồm việc máy chủ gửi tiêu đề kiểm soát bộ nhớ cache ('Cache-Control: no-cache, phải-revalidate, max-age = 0'). Các trình duyệt không bao giờ thực sự tải lại trang (được kiểm tra qua Wireshark) và event.persisted luôn luôn là sai. – giskard22