2012-04-10 12 views
14

Tôi có hai trang, A và B. Các dòng như sau:Chrome nút quay lại: chỉ đưa ra phiên bản cache của trang ban đầu, mà không cần bất kỳ nội dung Ajaxed

  • Tới Một
  • javascript Ajaxes một bó về nội dung để thêm vào A, hình thành A '
  • đi đến B
  • nhấn [Back] đi lại đến A, không phải A', mà tất cả các nội dung Ajaxed

Có bất cứ ai người khác nhận thấy điều này, và nếu có, bạn sửa nó như thế nào?

Nếu Chrome đang lưu trong bộ nhớ cache trạng thái A 'ngay trước khi chuyển sang B và sao chép A' khi quay lại, điều đó có thể chấp nhận được. Nếu Chrome chỉ tải lại toàn bộ A (bao gồm cả các yêu cầu Ajax đã biến đổi nó thành A ') cũng sẽ hoạt động. Hành vi hiện tại đang tải phiên bản A cũ, không đầy đủ của A, không phải là những gì tôi muốn.

EDIT: Tôi biết nó đang tải phiên bản được lưu trong bộ nhớ cache vì máy chủ không nhận được bất kỳ yêu cầu mới nào khi tôi nhấn [Quay lại].

+0

các tiêu đề bộ nhớ cache làm gì trông giống như cho trang tương ứng S? –

+0

@QuintinRobinson: Xin lỗi, tiêu đề bộ nhớ cache là gì? –

+0

Máy chủ của bạn nên thực thi chính sách lưu vào bộ nhớ cache được áp dụng cho các trang qua tiêu đề bộ nhớ cache. Tôi chân thành đề nghị bạn đọc về vấn đề này, đây là một tài nguyên: http://www.mnot.net/cache_docs/ –

Trả lời

0

Vâng, nếu bạn đang sử dụng yêu cầu XHR và không khung ẩn phía sau và nút phía trước không gắn liền với các yêu cầu XHR

0

Tôi biết chủ đề đó là cũ nhưng giải pháp cho vấn đề này không phải là quá dễ dàng để tìm thấy tôi đã lãng phí vài giờ để giải quyết nó. Hai dòng này đã giải quyết được sự cố Chrome cho tôi:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

Response.Cache.SetNoStore(); 
+0

là javascript này? –

+1

Không, có vẻ như đây là .net. Nó sẽ thay đổi dựa trên ngôn ngữ/khung mà bạn đang sử dụng. Về cơ bản, bạn chỉ cần đặt tiêu đề HTTP 'Cache-Control: no-store'. Ví dụ: nếu bạn đang sử dụng đường ray, http://www.fordevs.com/2011/10/how-to-prevent-browser-from-caching-a-page-in-rails.html – Ryan

5

Chủ đề này cũ nhưng tôi nghĩ tôi sẽ chia sẻ giải pháp của mình. Để Firefox, Chrome và Safari hoạt động một cách nhất quán, bạn phải đặt trình xử lý tải xuống trên trang cần được tải lại khi quay lại và cũng sử dụng tiêu đề bộ nhớ cache chặn.

Ví dụ

Trong HTTP Headers

Cache-Control: must-revalidate, no-store, no-cache, private

Và trong javascript cho trang

$(window).unload(function(){}); // Does nothing but break the bfcache 

đọc vào đây để biết thêm: http://madhatted.com/2013/6/16/you-do-not-understand-browser-history

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