chỉnh sửa tháng 2 năm 2014: Kích thước bộ nhớ cache tối đa trên iOS7.1 là 300Mb.
Một khách hàng đã hỏi tôi câu hỏi chính xác này gần đây, vì vậy tôi đã điều tra.
Theo iOS6 (tất cả các bài kiểm tra của tôi đã được thực hiện trên iOS6.1), đây là hai thứ khác nhau:
- một trang web sử dụng một .manifest, truy cập với điện thoại di động Safari
- một webapp trên màn hình chính, được tạo từ trang web
Trang web có .manifest có thể sử dụng tối đa 50mb bộ nhớ cache, với sự cho phép của người dùng được yêu cầu. Nó không thể sử dụng nhiều hơn. Giá trị này có thể được tìm thấy và xóa trong cài đặt/safari/nâng cao. Nếu bạn cố gắng thêm vào bộ nhớ cache, sự kiện error
sẽ bị kích hoạt và window.applicationCache.status
sẽ chuyển thành IDLE.
Ứng dụng web không chia sẻ cùng một bộ nhớ cache so với trang web của nó. Việc xóa cài đặt bộ nhớ cache/safari/nâng cao sẽ không làm bất kỳ điều gì cho bạn về ứng dụng web trên màn hình chính. Nó sẽ chấp nhận hơn 50mb bộ nhớ đệm mà không có đầu vào của người dùng, nhưng tôi không biết chính xác bao nhiêu (tôi đã thử nghiệm với 60mb thành công, hoàn toàn có thể truy cập ngoại tuyến. * Edit: try with 83mb, success) Tôi không biết nơi này dữ liệu có thể được nhìn thấy trong cài đặt iOS. Tôi đoán hư không.
Thử nghiệm đây là một cơn đau trong *** cho đến khi tôi tìm thấy spec. Có một API hoạt động hoàn hảo trên iOS6.
Bạn nên kiểm tra window.applicationCache.status
, mà cho bạn biết trạng thái ứng dụng là gì, và các sự kiện sau (cắt và dán từ mã của tôi, vì vậy với người nghe của họ):
window.applicationCache.addEventListener('checking', onChecking);
window.applicationCache.addEventListener('noupdate', onNoupdate);
window.applicationCache.addEventListener('downloading', onDownloading);
window.applicationCache.addEventListener('progress', onProgress);
window.applicationCache.addEventListener('cached', onCached);
window.applicationCache.addEventListener('updateready', onUpdateready);
window.applicationCache.addEventListener('obsolete', onObsolete);
window.applicationCache.addEventListener('error', onError);
Tất cả đang làm việc trên iOS 6.1, ngay cả những progress
sự kiện với event.loaded
và event.total
Một ứng dụng web bắt đầu bằng cách kiểm tra, sau đó kích hoạt noupdate
nếu .manifest là giống nhau. Trạng thái là IDLE
.
Nếu .manifest thay đổi, tình trạng là DOWNLOADING
, các progress
cháy sự kiện cho mỗi tập tin trong biểu hiện của bạn, sau đó tình trạng là UPDATEREADY
và updateready
cháy.
Nếu bạn ngoại tuyến, một vụ cháy và trạng thái error
sẽ là IDLE
.
Bạn có thể kiểm tra tình trạng online/offline với
var online = navigator.onLine ? 'online' : 'offline';
Nó hoạt động nhưng thông số kỹ thuật cho biết đó là không đáng tin cậy.
hơn Ba điều cần hoàn thành:
- manifest của tôi được đặt tên cache.manifest và tuyên bố như thế này
<html manifest="cache.manifest">
- .htaccess của tôi đã
AddType text/cache-manifest manifest
và ExpiresByType text/cache-manifest "access plus 0 seconds"
- ứng dụng của tôi có
<meta name="apple-mobile-web-app-capable" content="yes">
Với API này, cách dễ dàng hơn để hiểu những gì đang xảy ra dưới mui xe. Hãy chắc chắn để làm thử nghiệm của riêng bạn mặc dù, tôi không chắc chắn 100% của kết quả này hoặc họ có thể có thể với một phiên bản iOS mới. Tôi sẽ kiểm tra thêm cho kích thước tối đa.
Check-out này: http://stackoverflow.com/questions/2772908/max-size-ipad-iphone-offline-application-cache – mattdlockyer