Grails如何支持HTML5离线模式?

时间:2014-11-09 01:59:44

标签: html5 grails offline-caching

我正在编写一个Grails / GSP应用程序,当没有网络时,该应用程序需要脱机运行。我阅读了关于HTML5 Offline / AppCache的以下文章,这些文章非常有用:

总结(tl;dr),我需要在每个页面的manifest元素中定义<html>属性,如下所示:

<html manifest="myapp-cache.manifest">
    ...
</html>

其中myapp-cache.manifest是&#34;缓存清单的名称&#34;指定脱机/缓存行为的文件,可能如下所示:

CACHE MANIFEST
NETWORK:
    *
CACHE:
index.html
somethingCool.html
myimage.png
myapp.css

问题在于,使用Grails,我将无法缓存HTML文件。实际上,我可能有index.gspsomethingCool.gsp,但它们代表预处理的HTML,永远不会作为HTML文档存在。我无法在缓存清单中指定GSP,因为GSP可以(并且不应该)从客户端直接获取。

当我们开始重用诸如header.gspfooter.gsp之类的GSP,标记库等等时,事情变得更加复杂。

所以我问: Grails是否支持HTML5离线?如果是这样,如何以及以何种身份(文档在哪里)?如果没有,是否还有强制Grails脱机兼容?或Grails无法使用此HTML5功能?


更新

也许这可以通过URL映射以某种方式完成?例如,也许有一种方法可以让Grails将请求从http://myapp.example.com/fizzbuzz.html映射到http://myapp.example.com/fizzbuzz,然后提示Grails调用正确的控制器操作,并呈现正确的GSP?

2 个答案:

答案 0 :(得分:1)

你的陈述“我将没有要缓存的HTML文件”是错误的。 Grails是一个服务器端框架,虽然您在服务器端使用GSP,标记库等,但您所看到的所有客户端(浏览器)都是纯HTML。

因此,缓存.gsp应该是完全正常的,因为所有浏览器都会获得并且缓存是Grails提供的HTML。不要被扩展混淆!离线时,浏览器将以与.html相同的方式从AppCache获取HTML。

AppCache是​​一种客户端技术,因此我怀疑有一般服务器端技术的特定文档,特别是Grails,因为它对任何服务器端技术都是一样的。

@sneeb Grails可以提供您希望的任何格式的内容,HTML,JSON,XML等。因此,Grails支持任何类型的内容,包括HTML5。

答案 1 :(得分:0)

我意识到这是一个老问题,但我想提一下:只要每个页面都包含清单属性,您就不需要在缓存清单文件中包含每个html页面。当浏览器看到清单属性时,它足够聪明,可以缓存当前页面以及清单文件中的所有内容。

我从未尝试过,但我相信这意味着您可以在主模板中包含manifest属性,然后每个使用主模板的页面都会与清单文件的内容一起缓存。