14

我正在构建一个离线 Web 应用程序并想使用缓存清单。目前我的缓存清单看起来像这样:

CACHE MANIFEST
# Change the version number below each time we update a resource.
# Rev 1
index.html
photo.html
js/photo.js
css/photo.css
http://code.jquery.com/jquery-1.6.1.min.js
http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js
http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css
http://maps.google.com/maps/api/js?sensor=false&region=GB

是否有任何理由不在缓存清单中包含外部的、CDN 托管的 jQuery、jQuery Mobile 和 Google 地图文件?

我想不出一个,但我想我会问那些比我更聪明的人:)

4

3 回答 3

19

是的。实际上,您必须在清单中包含外部图像,否则即使网络连接可用,某些浏览器也根本不会加载它们!(除非您提供 NETWORK 部分,这可能会导致每次都获取图像,绕过常规浏览器缓存。)

图像被缓存(至少通过 Firefox,没有测试 Chrome)。

规范明确表示:

离线应用程序缓存清单可以使用绝对路径甚至绝对 URL

http://manifest-validator.com/还报告带有外部 URL 的清单为 OK。

我不是 100% 确定这也适用于脚本,但是使用 Firefox 进行的快速测试看起来脚本已按预期缓存。

于 2013-05-10T04:38:18.327 回答
2

MobileSafari 有一个规则,在 SSL 下,applicationCache 中的所有路径都必须符合同源策略。applicationCache 将成功缓存外源路径,但您不会在 Web Inspector->Storage->ApplicationCache 表中看到这些资源,并且它们在脱机时将不可用。

这种行为在 Apple 的文档中没有描述,但在 iOS 10.2 中仍然很明显:https ://developer.apple.com/library/content/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/OfflineApplicationCache/OfflineApplicationCache.html

于 2017-01-13T17:39:57.370 回答
-7

你不能。缓存清单仅适用于来自同一域的文件。如果您想将跨域资源列入白名单,则需要从您的域进行代理。

于 2011-09-09T14:56:13.683 回答