2013-01-07 42 views
8

Trong ứng dụng web của tôi, tôi đang thiết lập window.location để điều hướng đến một trang khác, nhưng vì một số lý do Firefox hiển thị phiên bản cũ của trang đó.Tôi có thể buộc window.location thực hiện yêu cầu HTTP thay vì sử dụng bộ nhớ cache như thế nào?

Sử dụng Firebug Tôi phát hiện thấy trình duyệt thậm chí không gửi yêu cầu HTTP, nó chỉ sử dụng phiên bản cũ của trang đó (thậm chí không phải trang cuối cùng) và hiển thị nó.

Bản thân trang có all the usual headers để ngăn bộ nhớ đệm hoạt động hoàn hảo khi tôi duyệt các trang của mình bằng liên kết hoặc nhập thủ công. Vấn đề chỉ xảy ra khi thiết lập window.location.

Đây có phải là sự cố về Firefox hoặc điều gì đó mong đợi từ bất kỳ trình duyệt nào không? Hành vi này có thể thay đổi không?

Trả lời

19

Bạn chỉ có thể thêm thông số ngẫu nhiên vào URL trang để yêu cầu trình duyệt gửi yêu cầu mới.

Vì vậy, thay vì sử dụng

window.location = "my.url/index.html"; 

sử dụng

window.location = "my.url/index.html?nocache=" + (new Date()).getTime(); 
+0

Buster cache cũ tốt :) Tôi đang sử dụng nó ngay bây giờ, nhưng tôi cũng quan tâm đến một số thông tin cơ bản, như thể đây là hành vi được thiết kế của 'window.location' hoặc nếu tôi đang làm điều gì sai ở đây. –

+0

Nếu trang của bạn được phân phát với tiêu đề http có nội dung không được lưu vào bộ nhớ cache, tôi không nghĩ rằng trang đó sẽ được chached. Nhưng nếu nó không được phục vụ với tiêu đề "không có bộ nhớ cache", nó là một hành vi tốt để lưu trữ nó càng nhiều càng tốt để tiết kiệm băng thông. Cahcning có thể xảy ra cả trong trình duyệt của người dùng và trong các thiết bị internet khác nhau như proxy. Do đó, cách tốt hơn là kiểm soát bộ nhớ đệm của trang. Nhưng "cache buster" là cách dễ dàng ... – mortb

2

Bạn có thể sử dụng location.reload với đối số thực, sẽ luôn bỏ qua bộ nhớ cache.

window.location.reload(true); 
+0

này tải lại chỉ trang web thực tế. Không thể sử dụng lệnh này để điều hướng đến bất kỳ trang web nào khác bằng cách bỏ qua bộ nhớ cache. –

0

Thêm một thời gian giá trị chuỗi truy vấn cụ thể hoặc bất kì điểm url. Điều này sẽ buộc trang phải được tải lại.

var yourNewLoc = "http://newlocation.com/"; 
document.location = yourNewLoc + "?c=" + (new Date()).valueOf(); 
0

Bạn phải xác thực nếu có bất kỳ thông số truy vấn hiện tại nào trong url. Nếu có bất kỳ tham số truy vấn nào, bạn nên thêm dấu thời gian bằng cách sử dụng "&". Tôi đã viết một đoạn trích ngắn có thể giúp bạn.

window.newLocation = function(location) { 
    var newLocation = (typeof location === "string") ? location : window.location.href, 
     appendType = (newLocation.indexOf("?") < 0) ? "?" : "&"; 
    window.location = newLocation + appendType + "_t=" + (new Date()).getTime(); 
} 

Cách sử dụng:

newLocation("index.html") or window.newLocation("index.html") 
// opens "index.html?_t=<timstamp>" 

newLocation("index.html?existingQuery=true") or window.newLocation("index.html?existingQuery=true") 
// opens "index.html?existingQuery=true&_t=<timstamp 

newLocation() or window.newLocation() 
// opens existing window location with a timestamp 

Bạn có thể sửa đổi thêm đoạn để loại bỏ thoát timestamp trong tham số truy vấn để tránh trùng lặp

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