有没有办法使用CDN(用于jQuery)并拥有一个离线Web应用程序(通过HTML5清单)?
我开始考虑HTML5s允许离线Web应用程序的能力。
前段时间我发现使用CDN对我的应用程序运行良好,所以我一直坚持使用它们,主要是为了jQuery。
但是,清单文件似乎不允许缓存跨域资源。
此时我一直在使用相关Dive Into HTML5教程中描述的catch-all清单。 我的jQuery类似于HTML5 Boilerplate中定义的内容 。
我希望能够继续从CDN为在线用户提供jQuery服务,但可能还有一个本地副本用于离线访问。
是否值得尝试继续这条路线,或者我应该切换到仅仅从我的网站提供jQuery服务所有请求?
谢谢。
实际上,您可以编写包含jQuery CDN链接的清单。 就像我的app.manifest
:
CACHE MANIFEST # 2012-01-20:v4 http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
那是HTML细分:
.... ....
它对我有用。
检查在线jquery是否存在以及是否从本地加载的路径在这里得到解答: 如何在CDN被阻止/不可用的情况下加载本地脚本文件作为后备?
哪里有讨论和几种不同的方法
我个人喜欢html5boilerplate方法:
您可以使用现代化器检查浏览器是否支持离线缓存http://www.modernizr.com/现代化器2.0版本支持条件加载,因此您可以使用它来检测并加载所需资源,并使用以下脚本(取自diveintohtml5) :
if (Modernizr.applicationcache) { // window.applicationCache is available! } else { // no native support for offline :( // maybe try Gears or another third-party solution }
但正如我之前所说,我更喜欢html5boilerplate方法
经过数周的思考,我终于在今晚开车回家时有了一个主意。
可以检查浏览器是否具有脱机支持。 然后,您可以拥有一个区域,询问用户是否要为应用程序启用脱机支持。 如果他们这样做,你加载你的本地jQuery副本。 如果没有,或者离线支持不可用,那么您只需从CDN引用jQuery。
或者它可能是应用程序中的单独页面。 如果他们访问它,它只是有一个脚本元素,可以提取您的本地jQuery文件。 然后页面返回一个或窗口关闭,具体取决于应用程序。 (我假设添加jQuery的本地副本在主页上不起作用,除非你从现有页面中删除jQuery(覆盖变量或其他?)。)
根据浏览器决定保留脱机内容(文件)的方式,如果本地jQuery文件仅加载到一个页面上,则很可能会出现问题。 当然,在用户离线之前,它会在每个页面上(可能)被调用。