2010-11-20 20 views
5

Tôi đã viết một ứng dụng web trình quản lý mật khẩu cơ bản để chạy ngoại tuyến trên thiết bị di động (thử nghiệm trên iPod Touch thế hệ thứ tư). Tôi đã thêm ứng dụng vào Màn hình chính và tất cả đều hoạt động tốt trong khi iPod trực tuyến và có thể kết nối với máy chủ. Khi tôi đặt iPod ẩn, khi tôi mở ứng dụng hộp thoại sau đi lên:Không thể tải ứng dụng web hoạt động ngoại tuyến trên iPod

Không thể mở PwdThing

PwdThing không thể mở được vì nó không được kết nối với Internet

các đơn tĩnh tập tin HTML cho ứng dụng (passwordthing.html) trỏ tới file manifest:

<html manifest="cache.manifest"> 
... 

các cache.manifest tập tin bao gồm tất cả các tập tin được sử dụng bởi các ứng dụng (bao gồm cả jQuery Mobile files):

CACHE MANIFEST 
passwordthing.html 
passwordthing.js 
... 

cache.manifest tập tin được thiết lập để được phục vụ như text/cache-manifest trong .htaccess file:

AddType text/cache-manifest .manifest 

Tất cả các tập tin nguồn là Github (this commit là phiên bản tại thời điểm viết) và tôi cũng đã thiết lập một số public server để cài đặt nó.

Tại sao tôi không thể làm cho ứng dụng của mình hoạt động ngoại tuyến?

+2

bạn nên trỏ chrome vào ứng dụng của mình để xem bạn có gặp phải bất kỳ lỗi bộ nhớ đệm nào không. – hvgotcodes

+0

@hvgotcodes Tôi chỉ tìm thấy lỗi đệm (tên tệp không hợp lệ), nếu bạn có thể thêm câu trả lời mới cho mỗi nhận xét của mình, tôi sẽ chấp nhận :-) –

+0

xong - bạn vẫn có thể muốn luôn thay đổi tên tệp kê khai của mình. Nếu không, một tập tin có thể thay đổi, nhưng tên vẫn giữ nguyên, và nó sẽ không được cập nhật. – hvgotcodes

Trả lời

2

Điều duy nhất tôi có thể nghĩ là bạn chưa thay đổi tệp và safari di động đã lưu trong bộ nhớ cache phiên bản cũ của tệp kê khai. thêm nhận xét vào tệp kê khai của bạn. Bạn cũng có thể muốn thử thay đổi tên của tệp kê khai; Tôi đã phải làm điều đó để có được IPad của tôi để bộ nhớ cache - mỗi khi tôi cập nhật ứng dụng của tôi, tôi thay đổi tên của biểu hiện để bao gồm ngày.

Lưu ý rằng iOS4.2 có hỗ trợ hiển thị tốt hơn nhiều. Bạn có thể thấy mọi thứ cải thiện khi nó ra ngoài.

Chỉnh sửa - Hoặc, khi nó quay ra, nó chỉ là một tên tệp không hợp lệ. ;) (xem bình luận về câu hỏi).

+0

Cảm ơn, đã thử thay đổi tên tệp kê khai nhưng không có sự khác biệt :-( –

+0

@ben bạn đã thử tải ứng dụng của mình bằng chrome và xem bảng điều khiển chưa? – hvgotcodes

1

[[Replicated my answer from here dưới đây vì nó có thể áp dụng ở đây để:]]

tôi thấy gỡ lỗi các ứng dụng HTML5 ẩn là một nỗi đau. Tôi tìm thấy mã từ bài viết này đã giúp tôi tìm ra những gì đã xảy ra với ứng dụng của tôi:

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

Debugging HTML 5 tuyến ứng dụng bộ nhớ cache bởi Jonathan Stark

Nếu bạn đang tìm kiếm để cung cấp ẩn truy cập vào ứng dụng web của bạn, Bộ đệm ẩn ứng dụng ngoại tuyến có sẵn trong HTML5 là kẻ giết người. Tuy nhiên, đó là một PITA khổng lồ để gỡ lỗi, đặc biệt nếu bạn vẫn đang cố gắng thu hút đầu xung quanh nó.

Nếu bạn đang gặp khó khăn với tệp kê khai bộ nhớ cache, hãy thêm JavaScript sau vào trang HTML chính của bạn và xem kết quả đầu ra trong bảng điều khiển bằng Firebug trong Firefox hoặc Debug> Hiển thị bảng điều khiển lỗi trong Safari.

Nếu bạn có bất kỳ câu hỏi nào, hãy PLMK trong các nhận xét.

HTH,
j

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

Ngoài ra, hãy chắc chắn rằng cache.manifest có đúng BOM (trong trường hợp của tôi UTF-8) phù hợp với bạn trong file HTML. Nếu bạn chỉ có tệp ASCII không phải là BOM và Loại nội dung được đặt thành UTF-8, bộ nhớ đệm sẽ không thành công

HTH một người nào đó.

Christine Boersen

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