我正在构建一个离线Web应用程序,并希望使用cache-manifest。目前我的缓存清单看起来像这样:
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 Maps文件?
我想不出一个,但我想我会问那些比我自己更聪明的人。)
答案 0 :(得分:19)
是。实际上,您必须在清单中包含外部图像,或者即使网络连接可用,某些浏览器也根本不会加载它们! (除非您提供NETWORK部分,这可能导致每次都提取图像,绕过常规浏览器缓存。)
图像将缓存(至少是Firefox,不测试Chrome)。
spec明确说:
离线应用程序缓存清单可以使用绝对路径甚至是绝对URL
http://manifest-validator.com/还会将包含外部网址的清单报告为“正常”。
我并非100%确定这也适用于脚本,但使用Firefox进行的快速测试看起来像是按预期缓存了脚本。
答案 1 :(得分: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
答案 2 :(得分:-7)