2011-04-19 12 views
103

मैं जावास्क्रिप्ट का उपयोग करके एक पृष्ठ फिर से लोड करना चाहता हूं लेकिन मैं भी कैश साफ़ करना चाहता हूं, इसलिए पेज रीफ्रेश करें पृष्ठ पर सर्वर से सबकुछ के नवीनतम संस्करण हैं।
आईई को छोड़कर अन्य ब्राउज़रों को नवीनतम सामग्री नहीं मिल रही है।window.location.reload स्पष्ट कैश

IE9 के लिए कोई समाधान?

+5

बदसूरत चीजें हो सकती हैं क्योंकि उपयोगकर्ता प्रॉक्सी के पीछे बैठते हैं। यह सुनिश्चित करने के लिए कि पेज रीलोड हो, बस अपने यूआरएल में यादृच्छिक वैल्यू जोड़ें। – Teson

उत्तर

160

reload() कैश अनदेखी एक तर्क है जो यह बताता है कि एक कठिन पुनः लोड, यानी ऐसा करने के लिए स्वीकार करने के लिए माना जाता है,:

location.reload(true); 

मैं अपनी विश्वसनीयता पुष्टि नहीं कर सकते, तो आप इस आगे की जांच कर सकते हैं।

+0

क्या यह एंड्रॉइड वेबकिट ब्राउज़र के लिए काम करता है? – prongs

+0

@prongs मुझे नहीं लगता कि यह क्यों नहीं होना चाहिए। बेशक, मेरे पास इसका परीक्षण करने के लिए एंड्रॉइड आधारित वेबकिट नहीं है ... – Christian

+16

आईई और एफएफ में काम करता है लेकिन क्रोम, सफारी में नहीं। क्रोम, सफारी में ऐसा करने के लिए कोई भी जानता है? – testpattern

40

आप इसे कुछ तरीकों से कर सकते हैं। एक, बस अपने head पर इस मेटा टैग जोड़ें:

<meta http-equiv="Cache-control" content="no-cache"> 

आप चाहते हैं सुनिश्चित करता है कि सामान है कि पहले से ही कैश था मिलता है को भी मिटा expires मेटा टैग -1 लिए यह बहुत तरह की स्थापना करके इसे हटाने के लिए काम करना चाहिए:

<meta http-equiv="Expires" content="-1"> 

http://www.metatags.org/meta_http_equiv_cache_control

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

<script src="mysite.com/js/myscript.js?12345"> 

--UPDATE--

टिप्पणियां मुझे पता है आप प्रोग्राम कैश और नहीं हर बार मिटा करना चाहता था पढ़ने के बाद: यहाँ एक उदाहरण है। क्या तुम कर सकते हो जे एस में एक समारोह है की तरह है:

eraseCache(){ 
    window.location = window.location.href+'?eraseCache=true'; 
} 

फिर, PHP में मान लें, आप कुछ इस तरह करते हैं:

<head> 
<?php 
    $cache = ''; 
    if(isset($_GET['eraseCache'])){ 
    echo '<meta http-equiv="Cache-control" content="no-cache">'; 
    echo '<meta http-equiv="Expires" content="-1">'; 
    $cache = '?'.time(); 
    } 
?> 
<!-- ... other head HTML --> 
<script src="mysite.com/js/script.js<?= $cache ?>" 
</head> 

यह परीक्षण नहीं किया है, लेकिन काम करना चाहिए। असल में, आपका जेएस फ़ंक्शन, अगर लागू होता है, तो पृष्ठ को फिर से लोड करेगा, लेकिन यूआरएल के अंत में एक जीईटी पैरामेट जोड़ें। तब आपकी साइट पर कुछ बैकएंड कोड होगा जो इस परम की तलाश में है। यदि यह अस्तित्व में है तो यह मेटा टैग और एक कैश var जोड़ता है जिसमें टाइमस्टैम्प होता है और इसे स्क्रिप्ट और सीएसएस में जोड़ता है जिसमें आपके पास कैशिंग समस्याएं होती हैं।

--UPDATE 2--

मेटा टैग वास्तव में अभ्यस्त लोड पर संचय मिटा। इसलिए, पेज लोड होने के बाद, तकनीकी रूप से आपको जेएस में मिट कैश फ़ंक्शन चलाने की आवश्यकता है, आपको परिवर्तनों के लिए इसे फिर से लोड करने की आवश्यकता है। आपको इसे अपनी सर्वर साइड भाषा से ठीक करने में सक्षम होना चाहिए। आप एक ही eraseCache जे एस आदेश चला सकता है, लेकिन इसके बजाय अपने पेज के शीर्ष पर इस चलाने के मेटा टैग जोड़ने के बजाय:

<?php 
    header("Cache-Control: no-cache, must-revalidate"); 
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
?> 
<!-- Here you'd start your page... --> 

इस तरह से काम करता है, क्योंकि यह पहले कैश मिटा देता है पेज लोड और कुछ भी चलाने से पहले।

+3

अगर मैं गलत हूं, तो मुझे सही करें, लेकिन मेटा कैश-कंट्रोल टैग पृष्ठ के कैशिंग को लोड होने से रोक देगा। यह क्लाइंट ब्राउज़र में पहले से सहेजे गए कैश को साफ़ नहीं करेगा। – Keylan

+2

इसके अलावा, आपके स्रोत विशेषता के अंत तक मिलीसेकंड में समय जोड़ना कभी भी उस जावास्क्रिप्ट फ़ाइल को कैश करने की अनुमति नहीं देगा ... जो सलाह नहीं दी जाती है। मैंने इसे इस सवाल से लिया कि coure06 अनुरोध से ब्राउज़र के कैश को साफ़ करने में सक्षम होना चाहता है - फाइल को स्थायी रूप से बीमा नहीं किया जाएगा कभी भी कैश नहीं किया जाएगा। शायद एक संयुक्त समाधान एक ही पृष्ठ पर एक लिंक को शामिल करने के लिए एक लिंक बनाना है जो जावास्क्रिप्ट को वर्तमान समय में शामिल करने के लिए मजबूर करेगा। – Keylan

+1

बस टिप्पणी जोड़ने के लिए जा रहा है क्योंकि मुझे लगता है कि नई चीजें जाहिर है। कुछ घटनाओं के आधार पर फ़ाइल पथ में मिलीसेकंड जोड़ना आसानी से कल्पना नहीं करेगा, क्योंकि यह एक बार किया जाता है - फ़ाइल पथ कभी भी myscript.js पर वापस नहीं जा सकता क्योंकि ब्राउज़र सिर्फ कैश की गई फ़ाइल पर वापस स्विच करेगा। – Keylan

4

मैंने इस जावास्क्रिप्ट स्क्रिप्ट को लिखा और इसे हेडर में शामिल किया (कुछ भी लोड से पहले)। ऐसा लगता है कि काम करता है। यदि पृष्ठ एक घंटे पहले लोड किया गया था या स्थिति अपरिभाषित है तो यह सर्वर से सब कुछ पुनः लोड कर देगा। एक घंटे = 3,600,000 मिलीसेकंड का समय निम्न पंक्ति में बदला जा सकता है: अगर (बदल> 3,600,000)

के साथ संबंध है

, Birke

<script type="text/javascript"> 
//<![CDATA[ 
function zeit() 
{ 
    if(document.cookie) 
    { 
     a = document.cookie; 
     cookiewert = ""; 
     while(a.length > 0) 
     { 
      cookiename = a.substring(0,a.indexOf('=')); 
      if(cookiename == "zeitstempel") 
      { 
       cookiewert = a.substring(a.indexOf('=')+1,a.indexOf(';')); 
       break; 
      } 
      a = a.substring(a.indexOf(cookiewert)+cookiewert.length+1,a.length); 
     } 
     if(cookiewert.length > 0) 
     { 
      alter = new Date().getTime() - cookiewert; 

      if(alter > 3600000) 
      { 
       document.cookie = "zeitstempel=" + new Date().getTime() + ";"; 
       location.reload(true); 
      } 
      else 
      { 
       return; 
      } 
     } 
     else 
     { 
      document.cookie = "zeitstempel=" + new Date().getTime() + ";"; 
      location.reload(true); 
     } 
    } 
    else 
    { 
     document.cookie = "zeitstempel=" + new Date().getTime() + ";"; 
     location.reload(true); 
    } 
} 
zeit(); 
//]]> 
</script> 
2

मेरे मामले को फिर से लोड में() काम नहीं करता है क्योंकि एएसपीनेट नियंत्रण व्यवहार करता है। इसलिए, इस मुद्दे को हल करने के लिए मैंने इस दृष्टिकोण का उपयोग किया है, इसके बावजूद एक काम लगता है।

self.clear = function() { 
    //location.reload(true); Doesn't work to IE neither Firefox; 
    //also, hash tags must be removed or no postback will occur. 
    window.location.href = window.location.href.replace(/#.*$/, ''); 
}; 
6

मैं इस समस्या थी और आप भी

window.history.forward(1); 

उपयोग कर सकते हैं आवेदन से बाहर ब्राउज़र वापस उपयोगकर्ता के लॉग के बाद बटन को रोकने के लिए मैं जावास्क्रिप्ट

location.reload(true); 

का उपयोग कर इसे हल।

+0

यह 'location.reload (true) कहां होगा, 'जावास्क्रिप्ट फ़ाइलों में रखा जाना चाहिए? – FedericoCapaldo

+0

हाँ, आप इसे किसी भी जेएस फ़ाइल में रख सकते हैं – yousef

+0

@FedericoCapaldo बस इसे किसी भी फ़ंक्शन में बुलाया जाता है जब आप उपयोगकर्ता के पृष्ठ को पुनः लोड करना चाहते हैं –

4

Cache.delete() का उपयोग नवीनतम क्रोम, फ़ायरफ़ॉक्स और ओपेरा ब्राउज़र के लिए कैश को साफ़ करने के लिए भी किया जा सकता है।

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