2011-02-25 108 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

相关问题