15

我开始关注 HTML5 允许离线 Web 应用程序的能力。

不久前,我发现使用 CDN 对我的应用程序很有效,所以我一直坚持使用它们,主要是为了 jQuery。

但是,清单文件似乎不允许缓存跨域资源。

在这一点上,我一直在使用相关的Dive Into HTML5 教程中描述的包罗万象的清单。我的 jQuery 与HTML5 Boilerplate中的定义类似。

我希望能够继续从 CDN 为在线用户提供 jQuery,但可能会缓存一个本地副本以供离线访问。

是否值得尝试这条路线,或者我应该切换到仅从我的站点为所有请求提供 jQuery 服务?

谢谢。

4

3 回答 3

7

实际上,您可以编写包含 jQuery CDN 链接的清单。就像我的app.manifest

CACHE MANIFEST
# 2012-01-20:v4

http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js

那是HTML段:

<html manifest="app.manifest">
<head>
    ....
</head>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    ....
</body>
</html>

它对我有用。

于 2012-04-15T04:28:20.330 回答
3

检查在线 jquery 是否存在以及是否从本地加载的路径在这里得到了解答: 如何在 CDN 被阻止/不可用的情况下加载本地脚本文件作为后备?

有讨论和几种不同方法的地方

我个人喜欢 html5boilerplate 方法:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.2.js"%3E%3C/script%3E'))</script>

您可以使用modernizer http://www.modernizr.com/检查浏览器是否支持离线缓存, modernizer 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 方法

于 2011-10-07T14:50:31.320 回答
0

经过数周的思考,今晚开车回家时,我终于有了一个想法。

可以检查浏览器是否具有离线支持。然后,您可以有一个区域询问用户是否愿意为应用程序启用离线支持。如果他们这样做,您将加载本地 jQuery 副本。如果没有,或者离线支持不可用,那么您只需从 CDN 引用 jQuery。

或者它可能是应用程序中的一个单独页面。如果他们访问它,它只是有一个脚本元素,可以拉入您的本地 jQuery 文件。然后页面要么返回一个,要么关闭窗口,具体取决于应用程序。(我假设添加您的本地 jQuery 副本在主页上不起作用,除非您从现有页面中删除 jQuery(覆盖变量或其他方式?)。)

根据浏览器决定保留离线内容(文件)的方式,如果本地 jQuery 文件仅加载在一个页面上,并且很少加载,则可能会出现问题。当然,直到用户离线,此时(可能)每个页面都会调用它。

于 2011-03-29T00:04:46.447 回答