2012-01-03 25 views
8

Tôi đang cố gắng lấy bộ nhớ cache ứng dụng ngoại tuyến HTML 5 hoạt động với trang web ASP MVC 3. Vấn đề tôi nhận được là khi tôi cố điều hướng đến một trang ở chế độ ngoại tuyến, nó không hoạt động.Tệp HTML 5 có nên hoạt động với các yêu cầu ajax không?

Tôi đang sử dụng tác vụ cho tệp kê khai để tệp có thể được tạo động và trong chế độ xem tôi chỉ định Resonse.ContentType = "text/cache-manifest".

Tôi đã lưu trữ ứng dụng cục bộ trong IIS vì vậy tôi đang sử dụng http://192.168.55.127/mywebsite/ để truy cập nó.

Đây là chế độ xem tệp kê khai tôi đang sử dụng. Nó sử dụng công cụ xem dao cạo và hơi lộn xộn (URL được mã hóa cứng vv) trong khi tôi cố gắng tìm ra điều gì sai.

@{ 
    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: 
* 

Điều này dẫn đến đường dẫn như:

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

mà có vẻ là tốt.

Tôi đã tham chiếu file manifest sử dụng đường dẫn đầy đủ quá:

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

mà có vẻ là ok, như khi tôi tải các trang web lên trong chrome và quan sát sự phát triển giao diện điều khiển, nó xuất hiện để cache tất cả các tập tin mà không ném bất kỳ lỗi nào. Ngoài ra, nếu tôi điều hướng đến http://192.168.55.127/mywebsite/manifest , nó sẽ phân phối tệp kê khai như tôi mong đợi để xem.

Trang web không sử dụng điều hướng bình thường, thay vào đó điều hướng sử dụng các đoạn băm - vì vậy để điều hướng đến nhà, url sẽ là master.htm # home hoặc tùy chọn nó sẽ là master.html # options. Sự thay đổi băm này được chọn bởi javascript và nó tải trang vào một thùng chứa div trong master bằng cách sử dụng ajax, cụ thể hơn là nó sử dụng phương thức 'load' trong jQuery để làm điều này.

Tất cả đều hoạt động tốt khi không ở chế độ ngoại tuyến và khi quan sát tab mạng trong chrome khi điều hướng, URL yêu cầu là chính xác và cùng một URL được liệt kê trong tệp kê khai. Điều duy nhất tôi có thể nghĩ là chế độ ngoại tuyến không hoạt động với yêu cầu ajax, nhưng tôi đã có ấn tượng rằng nó hoạt động tương tự.

Tôi đang thử chế độ ngoại tuyến bằng FireFox (phiên bản 9.0) bằng cách xóa tất cả lịch sử, duyệt đến trang chủ trang web, bật chế độ ngoại tuyến, sau đó cố điều hướng đến trang tùy chọn. Trong firebug tôi thấy một yêu cầu GET cho URL chính xác của trang tùy chọn nhưng nó không bao giờ trả về, nó thậm chí không lỗi. Các bánh xe tải (bên cạnh yêu cầu trong tab net trong firebug) chỉ giữ quay như thể nó vẫn đang tải. Tôi đã thử nó trong Opera 11.60 quá (vì nó cũng có một chế độ offline) và cùng một loại điều xảy ra.

Bất kỳ ai có ý tưởng nào về những gì tôi đang làm sai? Tôi đã bỏ lỡ điều gì đó hiển nhiên hoặc hiểu lầm cách tệp kê khai hoạt động như thế nào? Bất kỳ đề xuất sẽ được đánh giá cao.

Trả lời

1

(Tôi biết cũ nhưng đối với tài liệu tham khảo của câu hỏi tương lai ...)

Nếu các tập tin nội dung AJAX được liệt kê trong file manifest AppCache đúng (mà họ dường như là) thì đây nên làm việc. Cá nhân, tôi muốn sử dụng tương đối chứ không phải là đường dẫn tuyệt đối nhưng điều đó không nên tạo sự khác biệt.

Sự cố của bạn có vẻ là tệp kê khai không có đuôi tệp.Thử đổi tên tệp (và tham chiếu của nó trong master.htm) thành appcache.manifest hoặc tương tự. Sau đó, bạn cần đảm bảo rằng loại MIME của tệp kê khai được đặt trong máy chủ. Ví dụ. đối với Apache, bạn sẽ thêm một cái gì đó như:

AddType text/cache-manifest .manifest 

vào tệp cấu hình của máy chủ hoặc tệp .htaccess của bạn.

Ngoài ra, cũng như xóa dữ liệu được lưu trong bộ nhớ cache khi kiểm tra, hãy đảm bảo bạn làm mới trang ít nhất một vài lần khi bạn thực hiện thay đổi đối với tệp kê khai vì trình duyệt kiểm tra các bản cập nhật và tải xuống tệp trong các lần tải trang riêng biệt.

Cuối cùng, nó sẽ không hoạt động nếu các tệp bạn đang sử dụng với AJAX có tham số trong URL, ví dụ: ? id = 1234, nhưng không được liệt kê như vậy trong tệp kê khai. Đó không phải là trường hợp ở đây nhưng nó là một cái gì đó để được nhận thức.

Các vấn đề liên quan