2

作为我正在构建的启用离线的 Web 应用程序的加载屏幕的一部分(使用缓存清单),我想显示一个准确的进度条,让用户知道到目前为止哪些文件已下载,哪些文件仍待处理. 类似于以下内容:

正在加载...
/assets/images/logo.png:已加载
/assets/images/splashImage.png:待定

我知道我可以使用缓存“待处理”事件,但我没有看到事件参数有任何与之关联的数据。

有没有办法做到这一点?

4

2 回答 2

3

每个文件下载时都会触发一个progress事件,但是它的有效负载不包括我测试过的任何浏览器(Chrome、Safari、FF beta)中的文件名。Chrome 在控制台中显示文件名(尽管据我所知 JS 无法访问它),但 Safari 和 FF 都没有走那么远。从我所见,这些文件的下载顺序与它们在清单中列出的顺序不同,因此甚至没有办法生成一个有序列表,然后一次将它们删除。

所以在回答你的问题时,不,现在没有任何方法可以做到这一点。将来progress事件可能会包含文件名 - 至少在某些浏览器中 - 但现在这是不可能的。

我应该补充一点,在 Chrome 中(不是在 Safari 或 FF 中),您至少可以获得要下载的文件的数量,从而至少可以计算出准确的进度条。要在 Chrome 中获取此信息,您可以使用以下内容:

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

但是,这会在其他浏览器中出错,因此您需要包装一个try/catch或其他一些方法 ( typeof(e.total)) 以避免错误。

于 2011-02-25T18:47:46.817 回答
1

这已经晚了几年,但也许它会帮助其他正在研究这个的人。它没有列出文件或任何内容,但它会根据加载的文件总数显示一个准确的(ish)进度条。它可能还需要一些工作...... https://github.com/joelabeyta/app-cache-percent-bar

于 2014-03-31T19:46:23.693 回答