2012-01-03 5 views
8

ASP MVC 3 웹 사이트에서 HTML 5 오프라인 응용 프로그램 캐시를 사용하려고합니다. 내가 얻는 문제는 오프라인 모드에서 페이지로 이동하려고 시도 할 때 일 때 작동하지 않는다는 것입니다.HTML 5 캐시 매니페스트가 아약스 요청과 함께 작동해야합니까?

동적으로 생성 될 수 있도록 매니페스트 파일에 대한 작업을 사용 중이며,보기에서 Resonse.ContentType = "text/cache-manifest"를 지정합니다.

IIS에 로컬로 응용 프로그램을 호스팅 했으므로 여기에 http://192.168.55.127/mywebsite/을 사용하고 있습니다.

이것은 내가 사용중인 매니페스트보기입니다. 그것은 면도기 뷰 엔진을 사용하고 무엇이 잘못되었는지 알아 내려고 시도하는 동안 약간 지저분합니다 (하드 코딩 된 URL 등) 입니다. 잘 될 것 같다

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 # options이됩니다. 이 해시 변경 사항은 javascript에 의해 선택되며 ajax를 사용하여 마스터의 div 컨테이너에 페이지를로드합니다. 특히 jQuery의 'load'메소드를 사용하여이를 수행합니다.

오프라인 모드가 아닌 경우 모두 잘 작동하며 탐색 할 때 크롬의 네트워크 탭을 볼 때 요청 URL은 정확하며 매니페스트 파일에 나열된 URL과 동일합니다. 내가 생각할 수있는 유일한 것은 오프라인 모드가 아약스 요청에 대해 작동하지 않는다는 것이지만, 나는 그것이 똑같이 작동했다는 인상 아래에 있었다.

모든 기록을 지우고, 웹 사이트 홈 페이지를 탐색하고, 오프라인 모드를 활성화 한 다음 옵션 페이지로 이동하여 FireFox (버전 9.0)를 사용하여 오프라인 모드를 테스트하고 있습니다. 방화 광구에서 옵션 페이지의 올바른 URL에 대한 GET 요청이 표시되지만 절대 반환하지 않으며 오류가 아닙니다. 로딩 휠 (예 : 방화범 뚜껑의 넷 탭에있는 요청 옆)은 여전히로드중인 것처럼 계속 회전합니다. 나는 오페라 11.60에서도 (그것도 오프라인 모드를 가지고있다.) 똑같은 일이 발생했다.

내가 뭘 잘못하고 있는지에 대한 아이디어가 있으십니까? 매니페스트가 어떻게 작동해야하는지 명확하지 않거나 잘못 이해 한 것을 놓쳤습니까? 모든 제안을 주시면 감사하겠습니다.

답변

1

는 AJAX 콘텐츠 파일은 (그들이 것 같다있는) 제대로 AppCache를 매니페스트 파일에 나열되어있는 경우

다음이 작동합니다 (I 질문의 옛하지만 향후 참조를 ... 알고있다). 개인적으로, 나는 절대 경로보다는 상대 경로를 사용 하겠지만, 차이점을 만들어서는 안된다.

매니페스트 파일에 파일 확장명이없는 것 같습니다.파일 이름을 master.htm에서 appcache.manifest 또는 그와 비슷한 이름으로 변경하십시오. 그런 다음 매니페스트 파일의 MIME 유형이 서버에 설정되어 있는지 확인해야합니다. 예 : Apache의 경우 다음과 같이 추가하십시오.

AddType text/cache-manifest .manifest 

을 서버의 구성 파일 또는 .htaccess 파일에 추가하십시오.

또한 테스트 할 때 캐시 된 데이터를 지우는 것과 마찬가지로 브라우저가 업데이트를 확인하고 별도의 페이지로드로 파일을 다운로드하기 때문에 매니페스트 파일을 변경할 때 페이지를 적어도 두 번 새로 고쳐야합니다.

마지막으로 AJAX로 가져 오는 파일에 URL에 매개 변수가있는 경우 (예 : ? id = 1234이지만 매니페스트 파일에 나열되어 있지 않습니다. 그것은 여기에있는 것처럼 보이지 않지만 인식해야 할 것이 있습니다.