2010-11-20 236 views
5

我已經編寫了基本的密碼管理器類型網絡應用程序,以在移動設備上進行脫機運行(在第4代iPod Touch上進行測試)。我已將應用程序添加到主屏幕,並且在iPod處於聯機狀態時它可以正常工作,並且可以連接到服務器。有一次,我把iPod的下線,當我打開應用程序下面的對話框出現:無法讓網絡應用程序在iPod上脫機工作

無法打開PwdThing

PwdThing無法打開,因爲它沒有連接到互聯網

對於應用程序(passwordthing.html)的單一靜態的HTML文件指向清單文件:

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

cache.manifest文件包括由應用程序(包括jQuery Mobile文件)使用的所有文件:

CACHE MANIFEST 
passwordthing.html 
passwordthing.js 
... 

而且cache.manifest文件被設置在.htaccess文件中擔任text/cache-manifest

AddType text/cache-manifest .manifest 

所有源文件在Githubthis commit是撰寫本文時的版本),我也設置了一個public server來安裝它。

爲什麼我無法讓我的應用程序脫機工作?

+2

您應該將chrome指向您的應用程序以查看是否收到了任何緩存錯誤。 – hvgotcodes 2010-11-20 02:31:18

+0

@hvgotcodes我剛剛發現緩存錯誤(錯誤的文件名),如果您可以根據您的評論添加新的答案,我會接受它:-) – 2010-11-20 03:02:06

+0

完成 - 您仍然可能希望始終在每個版本中更改您的清單名稱。否則,文件可能會更改,但名稱保持不變,並且不會更新。 – hvgotcodes 2010-11-20 03:09:21

回答

2

我能想到的唯一的事情就是您沒有更改文件,移動Safari瀏覽器已經緩存了舊版本的清單。爲您的清單添加評論。您可能還想嘗試更改清單文件本身的名稱;我必須這樣做才能讓我的iPad緩存 - 每次我更新我的應用程序時,我都會更改清單的名稱以包含日期。

請注意,iOS4.2有更好的清單支持。當它出現時,你可能會看到情況有所改善。

編輯 - 或者事實證明,它只是一個錯誤的文件名。 ;)(見關於問題的評論)。

+0

謝謝,試圖改變清單文件名,但沒有區別:-( – 2010-11-20 02:48:31

+0

@ben你嘗試加載你的應用程序在鉻和看着控制檯? – hvgotcodes 2010-11-20 03:01:09

1

[下面複製my answer from here,因爲它可以在這裏申請:]

我發現調試HTML5離線應用程序是一個痛苦。我發現從本文的代碼幫助我弄清楚什麼是錯的我的應用程序:

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

調試HTML 5脫機應用程序緩存 由喬納森·斯塔克

如果您正在尋找提供離線訪問您的Web應用程序,HTML5中提供的離線應用程序緩存就是殺手鐗。然而,這是一個巨大的PITA來進行調試,尤其是如果你仍然試圖繞開它的話。

如果您正在使用緩存清單,請將以下JavaScript添加到主HTML頁面,並使用Firefox中的Firebug或Safari中的調試>顯示錯誤控制檯在控制檯中查看輸出。

如果您有任何疑問,PLMK的評論。

HTH,
Ĵ

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

此外,確保cache.manifest有正確的物料清單(對我來說UTF-8),在HTML文件相匹配的。如果您只有一個非BOM的ASCII文件,並且內容類型設置爲UTF-8,則緩存將失敗

HTH某人。

Christine Boersen

相關問題