2012-11-09 37 views
15

में होम स्क्रीन में जोड़े जाने पर एचटीएमएल 5 वेब ऐप कैशिंग नहीं है, स्पष्ट होने के लिए, वेब ऐप कैशिंग है और मोबाइल सफारी में ऑफलाइन ठीक काम कर रहा है।आईओएस

समस्या तब होती है जब इसे आईफोन 4 एस और आईपैड 2 पर होम स्क्रीन में जोड़ा जाता है, दोनों आईओएस 6.0.1 चला रहे हैं। यह ऑफ़लाइन काम नहीं करेगा और इंटरनेट से कनेक्ट करने के लिए नेटवर्क त्रुटि प्रदान करता है यानी "MYWEBAPP नहीं खोल सकता है। MYWEBAPP खोला नहीं जा सका क्योंकि यह इंटरनेट से कनेक्ट नहीं है"

मैं इसे कई घंटों तक डिबग कर रहा हूं और एक समाधान खोजने के लिए प्रतीत नहीं हो सकता है। मुझे कंसोल में कोई त्रुटि नहीं मिल रही है और मैं जोनाथन स्टार्क के debugging code

चला रहा हूं मैंने डेस्कटॉप सफारी, क्रोम और फ़ायरफ़ॉक्स के डेवलपर टूल दोनों ऑनलाइन/ऑफलाइन में ऐप का परीक्षण किया है। साथ ही सफारी में उपकरणों के साथ वेब इंस्पेक्टर। नतीजा आईफोन या आईपैड पर भी समान है। वे दोनों वेब ऐप को कैश करेंगे और मोबाइल सफारी में काम करेंगे, लेकिन होम स्क्रीन पर नहीं जोड़े जाने पर। ऑफ़लाइन या ऑनलाइन कोई त्रुटि नहीं है।

जहाँ तक मुझे पता है, मैं उपयोग कर रहा हूँ सर्वोत्तम प्रथाओं:

  1. जोड़ा HTML शीर्षक: कैश: <html manifest="photo.appcache">

    मैं भी सहित मैनिफ़ेस्ट फ़ाइल के लिए अलग-अलग नाम का उपयोग कर के साथ प्रयोग किया गया है। मैनिफेस्ट और ऑफलाइन। मैनफेस्ट जैसा कि मैंने पढ़ा है कि इससे कोई फर्क पड़ता है, लेकिन मेरे परीक्षण में इससे कोई फर्क नहीं पड़ता कि एक्सटेंशन कब तक हैं .manifest या .appcache और .htaccess फ़ाइल में उचित रूप से परोसा जाता है।

  2. जोड़ी सही MIME प्रकार: AddType text/cache-manifest appcache manifest

    मैं भी कोशिश की है: AddType text/cache.manifest manifest, AddType text/cache.manifest .manifest manifest, AddType text/cache-manifest .manifest

    मैं इस पर विश्वास नहीं है काम: AddType text/cache.manifest लेकिन मैं याद नहीं है। अधिकांश भाग के लिए यह मामला नहीं था और मैं के साथ फंस:

    AddType पाठ/कैश-प्रकट appcache प्रकट

    कि क्या एचटीएमएल 5 मोबाइल बॉयलरप्लेट में था के रूप में।

  3. जोड़ा गया:

नेटवर्क: *

appcache फाइल करने के लिए। मेरा मानना ​​है कि यह सब कुछ डाउनलोड करने के साथ-साथ सभी लिंक काम करने की अनुमति देता है।

  1. मैं इस लाइन को हटाने की कोशिश की है: <meta name="apple-mobile-web-app-capable" content="yes"> क्योंकि मैं इतना है कि एक समस्या मेरा के लिए इसी तरह हल किया जाता है पर यहाँ पढ़ा है, लेकिन मैं इस बात की पुष्टि कर सकते हैं कि यह मेरे परीक्षण में काम नहीं करता है । होम स्क्रीन आइकन पर दबाने पर इस लाइन को हटाने या सामग्री को "नहीं" पर सेट करने से मोबाइल सफारी पर रीडायरेक्ट किया जाएगा और पूर्णस्क्रीन नहीं खुल जाएगी।

मैं काफी यह नीचे यह iOS 6 में एक बग (मैं वास्तव में आईओएस 6.0.1 का उपयोग कर रहा) किया जा रहा है, संकुचित कर दिया है क्योंकि मुझे पता है कि डेटा अब ब्राउज़र में वेब ऐप्लिकेशन के लिए अलग हो गया है और वे होम स्क्रीन में जोड़े गए। मैं यह मुद्दा यहां देखने के लिए पोस्ट कर रहा हूं कि क्या किसी अन्य डेवलपर्स को एक ही समस्या का सामना करना पड़ा है।

उत्तर

15

मैंने इस मुद्दे को हल किया है। मैं आईओएस 6

में होम स्क्रीन वेब क्षुधा परीक्षण प्रयोजनों के लिए निम्नलिखित सुझाव देते हैं, पता करने के लिए जब एप्लिकेशन मोबाइल सफारी में कैश किए गए वेब निरीक्षक और जोनाथन स्टार्क की तरह एक अच्छा जे एस स्क्रिप्ट का उपयोग:

http://jonathanstark.com/blog/debugging-html-5-offline-application-cache?filename=2009/09/27/debugging-html-5-offline-application-cache/

इसे सफलतापूर्वक कैश करने के बाद, ऐप को अपनी होम स्क्रीन पर जोड़ें और होम स्क्रीन संस्करण को अलग-अलग कैश करने के लिए इसे खोलें। ऑफ़लाइन काम करने के लिए इसे पूरी तरह कैश करना होगा।

चूंकि मेरा ऐप कैश 22 एमबी डेटा है और डेटा की कैशिंग वेब ऐप के लिए अलग है, समस्या यह है कि मैं होम स्क्रीन ऐप को कैश करने के लिए पर्याप्त लंबे समय तक नहीं खोल रहा था।

यह उपयोगकर्ता भयानक है, लेकिन यह भी अच्छा है कि डेटा अलग है। मैं इसकी पुष्टि कर सकता हूं क्योंकि अगर आप सफारी से वेबसाइट डेटा हटाते हैं, तो होम स्क्रीन वेब ऐप अभी भी काम करेगा।

जहां तक ​​मुझे पता है, होम स्क्रीन वेब ऐप के लिए कैश किए गए डेटा को डीबग करने का कोई तरीका नहीं है, या जहां यह संग्रहीत है।

+0

नरक हाँ, यह स्क्रिप्ट समाधान था, मैं इसे एक उत्तर के रूप में नीचे जोड़ दूंगा। – Philip

+0

लिंक अब मर चुका है। – Joshua

+0

स्क्रिप्ट को @ फिलिप उत्तर में चिपकाया गया है। मैं एक गिस्ट के साथ लिंक अपडेट करूंगा। हालांकि, मैं जोनाथन स्टार्क ब्लॉग को नियंत्रित नहीं कर सकता। शायद यह देखने के लिए एक Google खोज करें कि आप इसे पा सकते हैं या नहीं? – Paul

1

उपरोक्त उत्तर बहुत उपयोगी था। @aul ने कहा कि उन्हें होम स्क्रीन वेब ऐप डीबग करने का कोई तरीका नहीं पता था, लेकिन मुझे एक रास्ता मिला।

अपने आईपैड या आईफोन को अपने कंप्यूटर पर रखें, फिर सफारी में डेवलपमेंट पर जाएं> और अपने डिवाइस का चयन करें। ड्रॉप डाउन मेनू में दिखाई देने के लिए आपका होमस्क्रीन ऐप खुला होना चाहिए। एक बार ऐप तक पहुंचने के बाद, आप त्रुटि कंसोल खोल सकते हैं और Jonathan Stark's script काम पर जा सकते हैं। एक बार मैनिफेस्ट डाउनलोड हो जाने के बाद, आप ऑफ़लाइन मोड में ऐप का उपयोग करने में सक्षम होंगे।

1

इस लिपि ने जीवन को आसान बना दिया! @ पॉल के लिए धन्यवाद!

var cacheStatusValues = []; 
cacheStatusValues[0] = 'uncached'; 
cacheStatusValues[1] = 'idle'; 
cacheStatusValues[2] = 'checking'; 
cacheStatusValues[3] = 'downloading'; 
cacheStatusValues[4] = 'updateready'; 
cacheStatusValues[5] = 'obsolete'; 

var cache = window.applicationCache; 
cache.addEventListener('cached', logEvent, false); 
cache.addEventListener('checking', logEvent, false); 
cache.addEventListener('downloading', logEvent, false); 
cache.addEventListener('error', logEvent, false); 
cache.addEventListener('noupdate', logEvent, false); 
cache.addEventListener('obsolete', logEvent, false); 
cache.addEventListener('progress', logEvent, false); 
cache.addEventListener('updateready', logEvent, false); 

function logEvent(e) { 
    var online, status, type, message; 
    online = (navigator.onLine) ? 'yes' : 'no'; 
    status = cacheStatusValues[cache.status]; 
    type = e.type; 
    message = 'online: ' + online; 
    message+= ', event: ' + type; 
    message+= ', status: ' + status; 
    if (type == 'error' && navigator.onLine) { 
     message+= ' (prolly a syntax error in manifest)'; 
    } 
    console.log(message); 
} 

window.applicationCache.addEventListener(
    'updateready', 
    function(){ 
     window.applicationCache.swapCache(); 
     console.log('swap cache has been called'); 
    }, 
    false 
); 

setInterval(function(){cache.update()}, 10000); 
0

मेरे पास दो भाग की समस्या थी। मैं अपने कैश ASP.NET MVC/उस्तरा साथ प्रकट पैदा हो गया क्योंकि मैं आसानी से एक आभासी आवेदन बंद साइट होस्ट करने में सक्षम होना चाहता था और अभी भी रास्तों लाइन अप है। सामग्री प्रकार कैश मैनिफेस्ट पर ठीक से सेट नहीं हो रहा था, इसलिए इंटरनेट एक्सप्लोरर और सफारी (आईओएस) इसे पहचान नहीं रहे थे (भले ही पीसी और एंड्रॉइड पर क्रोम होगा)।

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

तो चेतावनी का एक शब्द: केवल मैनिफेस्ट के हीम प्रकार के बारे में पूरी तरह से सुनिश्चित न हो, बल्कि सभी फाइलें जो प्रकट होती हैं।

+0

मैं भी कैश एएसपी के साथ लेकिन सर्वर साइड पर प्रकट उत्पन्न करते हैं। मैं माइम प्रकार कैसे देख सकता हूं? – Tatyana

+0

@Tatyana अपने ब्राउज़र के विकास उपकरण (F12) खोलें और नेटवर्क टैब को देखो। – mason

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

  • कोई संबंधित समस्या नहीं^_^