有没有办法使用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文件仅加载到一个页面上,则很可能会出现问题。 当然,在用户离线之前,它会在每个页面上(可能)被调用。