2012-01-03 21 views
8

मैं एक एएसपी एमवीसी 3 वेबसाइट के साथ काम कर रहे एचटीएमएल 5 ऑफ़लाइन एप्लिकेशन कैश प्राप्त करने की कोशिश कर रहा हूं। मुझे मिली समस्या यह है कि जब मैं ऑफ़लाइन मोड में किसी पृष्ठ पर नेविगेट करने का प्रयास करता हूं, तो यह काम नहीं करता है।क्या एजेक्स अनुरोधों के साथ एचटीएमएल 5 कैश मेनिफेस्ट काम भी करना चाहिए?

मैं मैनिफेस्ट फ़ाइल के लिए एक क्रिया का उपयोग कर रहा हूं ताकि इसे गतिशील रूप से जेनरेट किया जा सके, और दृश्य में मैं Resonse.ContentType = "text/cache-manifest" निर्दिष्ट करता हूं।

मैंने आईआईएस में स्थानीय रूप से एप्लिकेशन होस्ट किया है, इसलिए मैं इसे एक्सेस करने के लिए http://192.168.55.127/mywebsite/ का उपयोग कर रहा हूं।

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

http://192.168.55.127/mywebsite/scripts/Libs/jQuery.js 
http://192.168.55.127/mywebsite/pages/home.htm 

जो ठीक लगता है:

@{ 
    Layout = null; 
    Response.ContentType = "text/cache-manifest"; 
} 
CACHE MANIFEST 

# Version: @ViewBag.Version 

CACHE: 
#Script Files 
@foreach(var jsFile in Url.GetJsFiles()) 
{ 
    @string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(jsFile)) 
} 

#Style Sheets 
@foreach(var cssFile in Url.GetCssFiles()) 
{ 
    @string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(cssFile)) 
} 

#Images 
@foreach(var imageFile in Url.GetImageFiles()) 
{ 
    @string.Format("{0}{1}\r\n", "http://192.168.55.127", Url.Content(imageFile)) 
} 

#HTML Pages 
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/master.htm")) 
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/home.htm")) 
@string.Format("{0}{1}", "http://192.168.55.127", Url.Content("~/pages/options.htm")) 

NETWORK: 
* 

इस तरह के रूप में पथ का परिणाम है।

मैं पूर्ण पथ भी का उपयोग कर मैनिफ़ेस्ट फ़ाइल संदर्भित किया है:

<html manifest="http://192.168.55.127/mywebsite/manifest"> 

जो लगता है, ठीक होने के लिए के रूप में जब मैं क्रोम में साइट को लोड और डेवलपर कंसोल का निरीक्षण, यह प्रतीत होता है सब कैश करने के लिए बिना किसी त्रुटि को फेंकने वाली फाइलें। अगर मैं http://192.168.55.127/mywebsite/manifest पर नेविगेट करता हूं तो यह मैनिफेस्ट परोसता है क्योंकि मैं इसे देखने की अपेक्षा करता हूं।

वेबसाइट सामान्य नेविगेशन का उपयोग नहीं करती है, इसके बजाय यह हैश टुकड़ों का उपयोग करके नेविगेट करता है - इसलिए घर पर नेविगेट करने के लिए url master.htm # home होगा या विकल्पों के लिए यह master.html # विकल्प होगा। यह हैश परिवर्तन जावास्क्रिप्ट द्वारा उठाया गया है और यह पृष्ठ को AJAX का उपयोग कर मास्टर में एक div कंटेनर में लोड करता है, अधिक विशेष रूप से यह ऐसा करने के लिए jQuery में 'लोड' विधि का उपयोग करता है।

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

मैं सभी इतिहास को साफ़ करके, वेबसाइट होम पेज पर ब्राउज़ करके, ऑफ़लाइन मोड को सक्षम करने, फिर विकल्प पृष्ठ पर नेविगेट करने का प्रयास करके फ़ायरफ़ॉक्स (संस्करण 9.0) का उपयोग करके ऑफ़लाइन मोड का परीक्षण कर रहा हूं। फ़ायरबग में मुझे विकल्प पृष्ठ के सही यूआरएल के लिए एक जीईटी अनुरोध दिखाई देता है लेकिन यह कभी वापस नहीं आता है, यह भी त्रुटि नहीं करता है। लोडिंग व्हील (फायरबग में नेट टैब में अनुरोध के बगल में) बस चालू रहता है जैसे कि यह अभी भी लोड हो रहा है। मैंने इसे ओपेरा 11.60 में भी कोशिश की (क्योंकि इसमें ऑफ़लाइन मोड भी है) और इसी तरह की चीज होती है।

किसी के पास कोई भी विचार है कि मैं क्या गलत कर रहा हूं? क्या मुझे कुछ स्पष्ट या गलत समझा गया है कि मेनिफेस्ट को कैसे काम करना चाहिए? कोई भी सुझाव प्रशंसनीय होगा।

उत्तर

1

AJAX सामग्री फ़ाइलों को ठीक से (वे होने लगते हैं जो) AppCache मैनिफ़ेस्ट फ़ाइल में सूचीबद्ध हैं तो यह काम करना चाहिए (मैं प्रश्न के पुराने लेकिन के लिए भविष्य में संदर्भ के ... जानते हैं)। निजी तौर पर, मैं पूर्ण पथों के बजाय सापेक्ष का उपयोग करता हूं लेकिन इससे कोई फर्क नहीं पड़ता है।

आपकी समस्या यह प्रतीत होती है कि मेनिफेस्ट फ़ाइल में फ़ाइल एक्सटेंशन नहीं है।फ़ाइल (और master.htm में इसका संदर्भ) का नाम बदलने का प्रयास करें appcache.manifest या इसी तरह के। फिर आपको यह सुनिश्चित करना होगा कि मैनिफेस्ट फ़ाइल का एमआईएमई प्रकार सर्वर में सेट है। जैसे अपाचे के लिए आप कुछ जोड़ना चाहते हैं:

AddType text/cache-manifest .manifest 

सर्वर की कॉन्फ़िगरेशन फ़ाइल या आपकी .htaccess फ़ाइल में।

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

अंत में, यह काम नहीं करेगा यदि आप AJAX के साथ खींच रहे फ़ाइलों को URL में पैरामीटर हैं, उदा। आईडी = 1234, लेकिन मैनिफेस्ट फ़ाइल में सूचीबद्ध नहीं हैं। यह मामला यहां प्रतीत नहीं होता है लेकिन यह कुछ पता होना चाहिए।