2010-03-26 16 views
16

हमें एक अजीब समस्या मिल रही है जिस पर हम निश्चित नहीं हैं कि इसका क्या कारण है। मुझे इस मुद्दे को विस्तारित करने दें। मान लीजिए, हमारे पास दो अलग-अलग HTML पृष्ठ a.html और b.html हैं। और index.html में लिखी गई एक छोटी सी लिपि:रीफ्रेश iFrame (कैश इश्यू)

<html> 

<head> 
    <script> 
    function reloadFrame(iframe, src) { 
     iframe.src = src; 
    } 
    </script> 
</head> 

<body> 
    <form> 
     <iframe id="myFrame"></iframe> 
     <input type="button" value="Load a.html" onclick="reloadFrame(document.getElementById('myFrame'), 'a.html')"> 
     <input type="button" value="Load b.html" onclick="reloadFrame(document.getElementById('myFrame'), 'b.html')"> 
    </form> 
</body> 

</html> 

एक सर्वर घटक लगातार दोनों फ़ाइलों को a.html और b.html अद्यतन कर रहा है। समस्या यह है कि दोनों फाइलों की सामग्री सर्वर की तरफ सफलतापूर्वक अपडेट हो रही है। यदि हम खुलते हैं तो हम अपडेट किए गए परिवर्तन देख सकते हैं लेकिन क्लाइंट पुरानी सामग्री प्राप्त कर रहा है जो अद्यतन परिवर्तन नहीं दिखाता है।

कोई विचार?

उत्तर

23

a.html में इस जोड़ें और के लिए यह करने के लिए एक संभव समाधान, a.html करने के लिए अपने कॉल करने के लिए एक "कैश पैरामीटर" पारित

<head> 
    <meta http-Equiv="Cache-Control" Content="no-cache" /> 
    <meta http-Equiv="Pragma" Content="no-cache" /> 
    <meta http-Equiv="Expires" Content="0" /> 
</head> 

कोई कैश की जाँच करता

+3

@बेन - इस प्रश्न में एक्सएचटीएमएल का उपयोग करने का सुझाव देने के लिए कुछ भी नहीं है। उदाहरण के लिए, इनपुट में टैग बंद नहीं होते हैं। – Fenton

+0

यह समाधान मेरे लिए काम नहीं करता है, कृपया [इस सवाल] की जांच करें (http://stackoverflow.com/questions/22451674/wrong-content-when-refresh-a-page-contains-iframes-in-ie) – dencey

0

बाध्य करने के लिए b.html और b.html। उदाहरण के लिए

एचटीएमएल

<input type="button" value="Load a.html" onclick="cacheSafeReload('a.html');"> 

जावास्क्रिप्ट

function cacheSafeReload(urlBase) { 
    var cacheParamValue = (new Date()).getTime(); 
    var url = urlBase + "?cache=" + cacheValueParam; 
    reloadFrame(document.getElementById('myFrame'), url); 
} 
8

आप उन HTML फ़ाइलों को सर्वर साइड निर्देश जोड़ सकते हैं, तो आप को रोकने के लिए उचित हेडर भेज सकता है कैशिंग:

Making sure a web page is not cached, across all browsers (मुझे लगता है कि सर्वसम्मति यह है कि दूसरा जवाब सबसे अच्छा है, स्वीकृत नहीं)

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

page_1.html?time=102398405820 

:

एक सस्ता त्वरित चाल किसी GET पैरामीटर के रूप में एक यादृच्छिक संख्या जोड़ना है। निम्नलिखित की तरह

+0

यादृच्छिक संख्या चाल के निष्पक्ष कार्यान्वयन के साथ एक चेतावनी यह है कि आप बार-बार आमंत्रणों पर 'पृष्ठ_1.html? समय = 123? समय = 456? समय = 78 9? समय = 012 "जैसे यूआरएल के साथ समाप्त कर सकते हैं। हानिरहित, लेकिन बदसूरत IMHO। –

6

कोशिश कुछ: भले ही यह ब्राउज़र

+0

क्या यह कहीं भी प्रलेखित है? –

+0

यकीन नहीं है कि यह क्यों काम करता है, लेकिन यह वास्तव में काम करता है !!!! +1 – Gogol

0

Homero बारबोसा का समाधान एक आकर्षण की तरह काम किया द्वारा कैश किया गया था

<script> 
    var frameElement = document.getElementById("frame-id"); 
    frameElement.contentWindow.location.href = frameElement.src; 
</script> 

इस के लिए बाध्य करेगा आइफ्रेम पुनः लोड करना होगा। मेरे मामले में, मेरे पास पृष्ठ पर अलग-अलग आईफ्रेम थे, इसलिए मैंने निम्न कार्य किया:

$('.some_selector').each(function() { 
    var $randid = Math.floor(Math.random() * 101); 
    $(this).attr({'id': 'goinOnaSafari-' + $randid}); 

    var $frame = document.getElementById('goinOnaSafari-' + $randid); 
    $frame.contentWindow.location.href = $frame.src; 
});