2012-07-14 15 views
5

यदि आपके पास इस प्रश्न के लिए बेहतर शीर्षक है तो इसे संपादित करने में संकोच न करें।location.reload कैश

सबसे लंबे समय तक, मैंने पृष्ठ को पुनः लोड करने के लिए हमेशा location.reload() का उपयोग किया - यह करने के लिए सबसे तार्किक बात है, है ना?

लेकिन मैंने हाल ही में देखा है कि यह F5 के बराबर नहीं है, जैसा कि मैंने शुरू में सोचा था, लेकिन Ctrl + F5 के अधिक। सभी छवियों और अन्य लिंक की गई फ़ाइलों को सर्वर से फिर से अनुरोध किया गया था, जब मैं बस इतना करना चाहता था कि पृष्ठ को फिर से लोड किया गया हो।

मुझे पता चला कि मैं location.replace(location.href) का उपयोग कर सकता हूं और ऐसा लगता है कि मैं जिस प्रभाव को चाहता हूं उसे प्राप्त करने के लिए प्रतीत होता है: पृष्ठ को फिर से लोड करें लेकिन लिंक फ़ाइलों को कैश से पुनर्प्राप्त करें।

क्या यह आदर्श है? क्या इससे बेहतर तरीका है? क्या मैंने इस विधि के किसी भी नुकसान को नजरअंदाज कर दिया है?

(ध्यान दें: मैं पहले से ही, इस तरह के रूप में स्क्रिप्ट लिंक की गई फ़ाइलों पर कैश-पर्दाफाश प्रबंधन है एक क्वेरी स्ट्रिंग के रूप में filemtime जोड़कर) अपने ही सवाल का

+0

window.location.reload (false); कैश से पुनः लोड हो जाएगा ... – Drewness

+0

@TGxANAHEiiMx ["यदि यह गलत है या निर्दिष्ट नहीं है, तो ब्राउज़र पृष्ठ को अपने कैश से पुनः लोड कर सकता है।"] (https://developer.mozilla.org/en/DOM/window। स्थान) - "मई" और "पृष्ठ" के उपयोग पर ध्यान दें - यह "इच्छा" या लिंक की गई फ़ाइलों के बारे में कुछ भी नहीं कहता है। –

+0

आह, बिंदु लिया। सबसे अच्छा नहीं है क्योंकि आप इसे 'सर्वोत्तम प्रथाओं' स्टैंड प्वाइंट से लेकर आ रहे हैं न केवल 'कार्यात्मक' स्थिति ... – Drewness

उत्तर

4

जवाब में, वहाँ एक विशाल ख़तरा है: जब स्थान एक हैश है, ब्राउज़र पृष्ठ को पुनः लोड करने के बजाय उस हैश पर कूद जाएगा।

समाधान मैं कार्यान्वित इस प्रकार है:

reload = (function() { 
    var m = location.search.match(/[?&]__hash=([^&]+)/); 
    if(m) location.hash = unescape(m[1]); 
    return function() { 
      var h = location.hash; 
      if(h == "") { 
        location.replace(location.href); 
      } 
      else { 
        var s = location.search; 
        s = s.replace(/[?&]__hash=[^&]+/,''); 
        s += (s == "" ? "?" : "&")+"__hash="+escape(h); 
        location.replace(location.pathname+s); 
      } 
    }; 
})(); 

सर्वर साइड पर कुछ भी नहीं मान लिया जाये कि का उपयोग करता है $_GET['__hash'], इस सुरक्षित रूप से इस्तेमाल किया जा सकता।