2013-01-07 14 views
8

अपने वेब आवेदन में मैं एक अलग पृष्ठ पर नेविगेट करने window.location की स्थापना कर रहा हूँ, लेकिन किसी कारण के लिए Firefox कि पेज के एक पुराने संस्करण को दर्शाता है।कैश का उपयोग करने के बजाय HTTP अनुरोध करने के लिए मैं window.location को कैसे मजबूर कर सकता हूं?

Firebug का उपयोग करते हुए मैं पाया है कि ब्राउज़र भी एक HTTP अनुरोध नहीं भेजता है, यह बस (यहां तक ​​कि नहीं पिछले एक) है कि पेज के एक पुराने संस्करण का उपयोग करता है और यह प्रदर्शित करता है।

पेज ही कैशिंग जो पूरी तरह से काम करता है जब मैं लिंक या मैनुअल इनपुट का उपयोग कर अपने पृष्ठों ब्राउज़ को रोकने के लिए all the usual headers है। समस्या तब होती है जब window.location सेट करते हैं।

इस किसी भी ब्राउज़र से उम्मीद करना एक Firefox समस्या या कुछ और है? क्या यह व्यवहार बदला जा सकता है?

उत्तर

19

ब्राउज़र को नया अनुरोध जारी करने के लिए आप पृष्ठ URL पर एक यादृच्छिक पैरामीटर जोड़ सकते हैं।

तो बजाय

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

उपयोग

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

अच्छे पुराने कैश बस्टर :) मैं इसे उपयोग कर रहा हूँ अभी, लेकिन मैं भी कुछ पृष्ठभूमि जानकारी में दिलचस्पी रखता हूँ, अगर यह 'window.location' के लिए डिज़ाइन किया गया व्यवहार है की तरह या अगर मैं यहाँ कुछ गलत कर रहा हूँ। –

+0

यदि आपका पृष्ठ http शीर्षलेखों के साथ परोसा गया था जो कहते हैं कि पृष्ठ को कैश नहीं करना है, तो मुझे नहीं लगता कि यह छेड़छाड़ की जाएगी। लेकिन अगर इसे "कैश कैश" हेडर के साथ परोसा नहीं जाता है तो बैंडविड्थ को बचाने के लिए जितना संभव हो सके इसे कैश करना एक अच्छा व्यवहार है। Cahcning उपयोगकर्ता ब्राउज़र और proxies जैसे विभिन्न इंटरनेट उपकरणों में दोनों हो सकता है। इस प्रकार पृष्ठ के कैशिंग को नियंत्रित करने का एक बेहतर तरीका होगा। लेकिन "कैश बस्टर" आसान तरीका है ... – mortb

2

आप एक सच्चे तर्क है, जो हमेशा कैश बायपास करेंगे साथ location.reload उपयोग कर सकते हैं।

window.location.reload(true); 
+0

यह केवल वास्तविक साइट पुन: लोड से बचने के लिए दूर करने के लिए टुकड़ा को संशोधित कर सकता है। इस कमांड का उपयोग कैश को बाईपास करने के साथ किसी अन्य साइट पर नेविगेट करने के लिए नहीं किया जा सकता है। –

0

का उपयोग कर यूआरएल के लिए कुछ समय जोड़े विशिष्ट या यादृच्छिक क्वेरी स्ट्रिंग मूल्य। यह पेज को फिर से लोड करने के लिए मजबूर करेगा।

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

यूआरएल में कोई मौजूदा क्वेरी पैरामीटर मौजूद है तो आपको सत्यापित करना होगा। यदि कोई क्वेरी पैरामीटर मौजूद है, तो आपको "" का उपयोग करके टाइमस्टैंप जोड़ना चाहिए। मैंने एक त्वरित स्निपेट लिखा है जो आपकी मदद का हो सकता है।

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(); 
} 

उपयोग:

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 

आप आगे क्वेरी पैरामीटर में टाइमस्टैम्प बाहर निकलने दोहराव

संबंधित मुद्दे

 संबंधित मुद्दे