2010-12-27 9 views
20

ऐसा लगता है कि एक बार आपके पास एक मैनिफेस्ट एंट्री है, एक ला:एक बार जब एक HTML दस्तावेज़ में एक मैनिफेस्ट (कैश.मैनिफेस्ट) हो, तो आप इसे कैसे हटा सकते हैं?

<html manifest="cache.manifest"> 

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

दूसरे शब्दों में, यदि आपके पास है:

  • index.html (मैनिफेस्ट परिभाषित के साथ)
  • file1.js (प्रकट में संदर्भित)
  • file2.js (प्रकट में संदर्भित)
  • cache.manifest (दो जेएस फ़ाइलों को सूचीबद्ध करता है)

- index.html से मैनिफेस्ट प्रविष्टि को हटा रहा है और मैनिफेस्ट को संशोधित कर रहा है (इसलिए यह ब्राउज़र द्वारा समाप्त हो जाता है और सभी सामग्री पुनः लोड हो जाती है) इस पृष्ठ को नहीं रोकेगी व्यवहार करने से जैसे कि यह अभी भी पूरी तरह से कैश किया गया है। यदि आप index.html पर स्रोत देखते हैं तो आपको अब सूचीबद्ध मैनिफेस्ट दिखाई नहीं देगा, लेकिन ब्राउज़र अभी भी केवल cache.manifest फ़ाइल का अनुरोध करेगा, और जब तक कि उस फ़ाइल की सामग्री बदली न जाए, तब तक किसी भी फाइल में कोई अन्य बदलाव नहीं दिखाया जाएगा उपयोगकर्ता।

यह एक सुंदर चमकदार बग की तरह लगता है, और यह आईओएस के साथ-साथ सफारी के मैक संस्करणों पर भी मौजूद है। क्या किसी को पृष्ठ को रीसेट करने और उपयोगकर्ता हस्तक्षेप की आवश्यकता के बिना कैश से छुटकारा पाने का कोई तरीका मिला है?

उत्तर

17

Ive एक ही सवाल शोध किया गया है, और यह करने के लिए एक एपीआई प्रतीत नहीं करता है:

  1. गतिशील गति प्रदान है कि एक पृष्ठ
  2. कैश किया गया है
  3. गतिशील रूप से एक पृष्ठ को कैश होने से रोकने का कारण बनता है।

यहाँ सबसे अच्छा संसाधन मैं मिल गया है कर रहे हैं:

http://www.html5rocks.com/tutorials/appcache/beginner/

http://www.thecssninja.com/javascript/how-to-create-offline-webapps-on-the-iphone

विशेष रूप से, पहले लिंक से इस बोली:

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

अन्यथा, कैश को उतारने के बारे में कहीं भी उल्लेख नहीं है।

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

गूगल क्रोम में, उपयोगकर्ता निम्न URL पर जा सकते हैं:

chrome://appcache-internals/

और मैन्युअल रूप से कैश अक्षम करें। बेशक, अगली बार जब वे पृष्ठ पर जाते हैं, तो पृष्ठ पर मैनिफेस्ट प्रॉपर्टी सेट होने पर इसे रिक्त किया जाएगा।

आप विनिर्देश को देखें, तो: 5.6 Offline Web applications

यह एक स्थिति है जहाँ कैश निकाल दिया जाता है का सुझाव लगता है। विशेष रूप से, खंड 5.6.4.5:

तो प्रकट प्राप्त करने में कठिनाई को 404 या 410 प्रतिक्रिया या समकक्ष के कारण विफल रहता है, तो इन substeps चलाएँ: मार्क कैश समूह के रूप में अप्रचलित। यह कैश समूह कैश समूह में किसी एप्लिकेशन कैश से पहले से जुड़े दस्तावेज़ ऑब्जेक्ट्स की प्रसंस्करण के अलावा किसी अन्य उद्देश्य के लिए मौजूद नहीं है। यदि कैश समूह में एक एप्लिकेशन कैश है जिसका पूर्णता ध्वज अपूर्ण है, तो उस एप्लिकेशन कैश को छोड़ दें।

यह तो कहते हैं:

इस एक कैश प्रयास, पूरी तरह अलग कर दें कैश समूह था।

असल में, यदि कैश मेनिफेस्ट फ़ाइल के अनुरोध का अनुरोध 404 में होता है, तो पूरे कैश को त्याग दिया जाना चाहिए। तो, क्या आपने कैश मेनिफेस्ट फ़ाइल का अनुरोध होने पर सर्वर को 404 या 410 वापस करने का प्रयास किया है? यह काम करना चाहिए। चाल केवल उन पृष्ठों के लिए 404/410 लौटाना है जिन्हें आप मैनिफेस्ट को हटाना चाहते हैं (शायद यूआरएल पैरामीटर का उपयोग कर रहे हैं?)।

+4

404 लौटने से क्रोम में कैश समूह को अनलोड करना प्रतीत होता है। इस पर शोध करने के लिए धन्यवाद! मैंने एक खाली कैश मैनिफेस्ट लौटने की कोशिश की, और यह कैश किए गए संसाधनों को अनलोड नहीं करता है। –

+2

मैं इस काम की पुष्टि कर सकता हूं। परिणाम देखने के लिए आपको अपने पृष्ठ को दो बार पुनः लोड करना होगा। – Soska

4

एक संभव समाधान:

  • मेनिफेस्ट संशोधित (इसलिए यह पुनः लोड)
  • एक गैर existant प्रकट संदर्भ के लिए मास्टर फ़ाइल (index.html) को संशोधित, तो यह एक 404
हो जाता है

शायद ही सुरुचिपूर्ण है, लेकिन ऐसा लगता है। तब मुख्य समस्या यह है कि आप इस 404-जेनरेटिंग झूठी मैनिफेस्ट एंट्री के साथ फंस गए हैं जब तक कि आपकी साइट पर कभी भी नहीं आ गया है और उनके कैश को मंजूरी दे दी गई है।

वहाँ एक बेहतर तरीका हो गया है ...

0

यह पुराना हो सकता है लेकिन आशा है कि किसी के लिए अभी भी सहायक हो।

आईआईएस गुणों में अपने HTTP शीर्षलेखों पर नज़र डालें। सामग्री समाप्ति को सक्षम या अक्षम करने पर एक नज़र डालें। ऐसा हो सकता है कि आईआईएस अभी भी कैश कर रहा है।

2

बस प्रकट फ़ाइल को हटाने का प्रयास करें।मोज़िज़ला डॉक्स से:

एप्लिकेशन कैश भी अप्रचलित हो सकते हैं। यदि सर्वर से मैनिफेस्ट हटा दिया गया है, तो ब्राउज़र उस मैनिफेस्ट का उपयोग करने वाले सभी एप्लिकेशन कैश को हटा देता है, फिर अनुप्रयोग कैश ऑब्जेक्ट में "अप्रचलित" ईवेंट भेजता है। फिर एप्लिकेशन कैश की स्थिति ओब्सलेट पर सेट की जाती है।

यह भी क्रोम पर मेरे लिए काम किया।

+0

जैसा कि मैं याद कर सकता हूं। विकास उद्देश्यों के लिए (जहां आपको चीजों को दृढ़ता से अद्यतन करने की आवश्यकता है) यह समाधान मदद नहीं करता है ... या? – davidtaubmann

1

एक समाधान है, तो आप आईआईएस 7 उपयोग कर रहे हैं .manifest या .appcache फ़ाइल प्रकार है कि आप कैशिंग को सक्षम करने के लिए जोड़ा के लिए माइम प्रकार दूर करने के लिए है। जब आप फिर से कैशिंग सक्षम करना चाहते हैं तो आप इसे हमेशा वापस जोड़ सकते हैं। मेरा यही तय करने के लिए मैंने यही किया।

1

क्या हम करते हैं प्रकट में फ़ाइलों की सूची को नष्ट है, इसलिए इसे बाहर खड़ा नहीं फ़ाइल संचित किया जाएगा।

यह हमारे लिए काम करता है।

0

विकास प्रयोजनों के (लगातार परिवर्तन), हम क्या किया है के लिए है:

  1. अपने सर्वर साइड भाषा के तहत सेट एक -cache प्रकट फ़ाइल, उदाहरण के लिए, हम पीएचपी उपयोग करते हैं, तो हमारे विकास कैश "cache.manifest.php" कहा जाता है और इसे इस तरह html टैग में इस एक ही तरह से इशारा किया है: में

    <html manifest="cache.manifest.php"> 
    
  2. कुछ टाइम dependent- स्ट्रिंग (या कुछ और है कि आप सूट) रखो कहीं आपके एक टिप्पणी के रूप में प्रकट (# ---), ताकि फाइल थोड़ी देर में अलग हो (ब्राउज़र मैनिफेस्ट की सामग्री की तुलना में प्रतीत होता है, तारीख नहीं), उदाहरण के लिए यह स्ट्रिंग हर मिनट मेनिफेस्ट बदलती है, इस तरह सभी फाइलें फिर से कैश की जाएंगी पिछली बार एक अलग मिनट में यात्रा है।

    <?php if($dev) echo date("Y-m-d H:m"); ?> 
    

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

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

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