2011-02-25 150 views
2

至於已啓用離線功能的網絡應用程序我建設(using a cache manifest),我想準確顯示進度條,讓加載屏幕的一部分,用戶知道哪些文件具有這樣遠遠被下載並且仍在等待中。像下面這樣:HTML離線應用程序緩存,清單下載的文件

Loading... 
/assets/images/logo.png: loaded 
/assets/images/splashImage.png: pending

我知道,我可以使用緩存「待定」事件,但我不認爲這事件參數具有與它們相關的任何數據。

有沒有辦法做到這一點?

回答

3

有一個progress事件會在每個文件下載時觸發​​,但其有效負載不包含我測試過的任何瀏覽器(Chrome,Safari,FF測試版)中的文件名。 Chrome會在控制檯中顯示文件名(儘管據我所知它不能被JS訪問),但Safari和FF甚至都沒有。從我所看到的文件不會按照它們在清單中列出的順序下載,所以甚至沒有辦法生成有序列表,然後一次一個地敲掉它們。

那麼,現在回答你的問題,沒有,沒有任何辦法現在就這樣做的權利。有可能在將來progress事件將包含文件名 - 至少在某些瀏覽器中 - 但現在這是不可能的。

我要補充的是,在瀏覽器(不是在Safari或FF),你至少可以得到文件的數量要下載,讓您至少計算準確的進度條。要在Chrome得到這個你應該使用下列內容:

function downloadProgress(e) { 
    totalfiles = Number(e.total); 
} 
window.applicationCache.addEventListener("progress", downloadProgress, false); 

然而,這將在其他瀏覽器報錯了,所以你需要用一個try/catch或其他方法(typeof(e.total)),以避免錯誤。

+0

這符合我一直在讀什麼。我會保持我的手指交叉,這使得未來的規範 – 2011-02-25 19:10:38

+0

我希望如此,但我不會賭它。從我瞭解他們在HTML5走下路,他們想離開它的瀏覽器做一個進度條,並顯示文件等,並有一種爲不同的網站,你可以手動刪除文件瀏覽器。 – Myforwik 2012-11-03 07:59:33

+0

對我來說,Chrome還提供了一個非常方便的'e.loaded'。請注意,您將事件與JQuery綁定爲'$(appCache).bind(「progress」,function(event){});'。加載的和總數都會丟失。 – jpprade 2015-04-30 22:16:38

相關問題