2017-08-02 26 views
8

तो, मेरे पास सेवा कार्यकर्ता के साथ एक HTML पृष्ठ है, सेवा कार्यकर्ता index.html और मेरी जेएस फ़ाइलों को कैश करता है।सेवा कर्मचारी के कैश को कैसे साफ़ करें?

समस्या यह है कि जब मैं जेएस बदलता हूं, तो परिवर्तन सीधे क्लाइंट ब्राउज़र पर दिखाई नहीं देता है। निश्चित रूप से क्रोम देव-टूल्स में, मैं कैश को अक्षम कर सकता हूं। लेकिन क्रोम मोबाइल में, मैं यह कैसे कर सकता हूं?

मैंने साइट सेटिंग्स तक पहुंचने और क्लीनर% रीसेट बटन को हिट करने का प्रयास किया। लेकिन यह अभी भी पुराने पृष्ठ/कैश से लोड लोड करता है। मैंने अन्य ब्राउज़र या क्रोम गुप्त का उपयोग करने की कोशिश की और यह नया पृष्ठ लोड करता है।

फिर, मैं अपने ब्राउज़िंग डेटा (केवल कैश) को साफ़ करने का प्रयास करता हूं और यह काम करता है।

मुझे लगता है कि यह सही काम नहीं करना चाहिए? मेरे उपयोगकर्ता को पता नहीं चलेगा कि क्रोम ब्राउज़र कैश को साफ़ किए बिना पृष्ठ अपडेट किया गया है या नहीं।

उत्तर

10

उपयोग इसे हटाना पुरानी कैश:

self.addEventListener('activate', function(event) { 
    event.waitUntil(
    caches.keys().then(function(cacheNames) { 
     return Promise.all(
     cacheNames.filter(function(cacheName) { 
      // Return true if you want to remove this cache, 
      // but remember that caches are shared across 
      // the whole origin 
     }).map(function(cacheName) { 
      return caches.delete(cacheName); 
     }) 
    ); 
    }) 
); 
}); 
+2

यहां 'स्वयं' क्या है? विंडो ऑब्जेक्ट या सर्विसवर्कर? – loopmode

+2

स्टैक ओवरफ़्लो पर यह अच्छा अभ्यास है कि आपके समाधान को क्यों काम करना चाहिए, इस बारे में एक स्पष्टीकरण जोड़ें। अधिक जानकारी के लिए [कैसे जवाब दें] (// stackoverflow.com/help/how-to-answer) पढ़ें। –

13

other answer थोड़ा वर्बोज़ है और एक बहुत सवाल जरूरतों की तुलना में अधिक है, और स्पष्टीकरण की अपनी पूर्ण अभाव को देखते हुए करता है यह ओर से पार्स करने का एक सा की आवश्यकता है उनके लिए उपयोगकर्ता को उनके लिए काम करने वाली किसी चीज़ में बदलने के लिए। तो यहाँ आसान है;

आप कैश नाम जानते हैं तो आप बस कहीं से भी caches.delete() कॉल कर सकते हैं आप कार्यकर्ता की तरह:

caches.delete(/*name*/); 

और अगर आप सभी कैश साफ करने के लिए (और उनके लिए इंतजार नहीं करना चाहता था, यह कहना एक पृष्ठभूमि कार्य है) आपको केवल add this:

caches.keys().then(function(names) { 
    for (let name of names) 
     caches.delete(name); 
}); 
+1

इसके लिए धन्यवाद। यह एक बहुत स्पष्ट है। मैंने प्रश्न –

+1

नाह को कोई चिंता नहीं करने के लिए जल्दी ही लिखा है। यदि कोई व्यक्ति 'सक्रिय' श्रोता के भीतर कैश का एक विशिष्ट सेट हटाना चाहता था तो आपका सही होगा; मैंने बस ऐसा किया है अगर कोई केवल एक/सब कुछ 0/32 सब कुछ डंप करना चाहता था – Hashbrown

+0

सबसे कॉम्पैक्ट कोड शायद 'caches.keys() है। (Cs => cs.forEach (c => caches.delete (c)))' या async फ़ंक्शंस के लिए '(caches.keys() का इंतजार करें। के लिए (c => caches.delete (c))' –

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