如何在HTML5缓存清单中指定通配符以加载目录中的所有图像?

zua*_*auz 21 html5 caching manifest offline-caching offlineapps

我在应用程序中使用的文件夹中有很多图像.当使用缓存清单时,如果我可以指定一个通配符来加载要缓存的特定目录中的所有图像或文件,则更容易维护.

例如

CACHE MANIFEST
# 2011-11-3-v0.1.8
#--------------------------------
# Pages
#--------------------------------
../index.html
../edit.html
#--------------------------------
# JavaScript
#--------------------------------
../js/jquery.js
../js/main.js
#--------------------------------
# Images
#--------------------------------
../img/*.png
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?在一些浏览器中尝试过它,../img/*但它似乎不起作用.

rob*_*rtc 21

它会更容易,但它会如何运作?清单文件是在浏览器中解析和操作的东西,除了你告诉它之外,它对你服务器上的文件没有特别的了解.如果浏览器看到这个:

../img/*.png
Run Code Online (Sandbox Code Playgroud)

浏览器应该从服务器请求的第一个图像是什么?让我们从这些开始:

../img/1.png
../img/2.png
../img/3.png
../img/4.png
...
../img/2147483647.png
Run Code Online (Sandbox Code Playgroud)

这是所有可能存在的数字名称的图像,在2 31 -1半任意停止.您的img目录中存在20亿个文件中有多少个?你真的想要一个浏览器让所有这些请求只能获得20亿个404吗?为了完整性,浏览器可能还想要请求所有零填充的等价物:

../img/01.png
../img/02.png
../img/03.png
../img/04.png
...
../img/001.png
../img/002.png
../img/003.png
../img/004.png
...
../img/0001.png
../img/0002.png
../img/0003.png
../img/0004.png
...
Run Code Online (Sandbox Code Playgroud)

现在,浏览器已经为文件提供了超过40亿个HTTP请求,而这些文件大部分都没有,并且在构建服务器上可能存在的可能文件名时,它甚至还没有写入字母或标点符号.这不是清单文件工作的可行方法.服务器是img目录中文件的已知位置,因此必须在服务器上构造文件列表.

  • 如果没有文件夹/目录列表,您可能会说"缓存已在此请求中加载的任何文件并匹配我指定的文件夹"因此该文件夹中没有任何图像,但页面引用的任何图像. (7认同)

Mad*_*iha 17

我不认为这样做.您必须逐个指定所有图像,或者使用简单的PHP脚本循环遍历目录并输出文件(text/cache-manifest当然使用正确的标题).

  • 实际上,如果你允许目录列表**,如果你浏览到... mysite.com/img/并且你得到目录中所有文件的列表,那么通配符就可以工作**.我花了大部分时间试图找出网站为什么在我的开发机器上工作(允许目录列表)但不在我的测试服务器上(不允许列表).但是,出于安全考虑,大多数服务器禁用目录列表 (19认同)