dojo和脱机应用程序缓存

时间:2011-04-07 08:49:48

标签: html5 dojo offline mobile-webkit application-cache

我们一直在使用Dojo以及新浏览器中提供的存储和离线功能来开发支持脱机的JavaScript应用程序。

应用程序非常大,但似乎从缓存中加载了较大的文件,我可以看到该应用程序是缓存的。正在使用applicationcache功能,并且我和Chrome可以看到应用程序缓存中没有错误。

但是我们遇到了问题。显然Dojo无法加载其语言资源,也无法加载描述我们连接的服务的SMD文件。

这些问题在webkit-mobile上非常明显,它是目标浏览器。

对可能出错的任何想法?

4 个答案:

答案 0 :(得分:2)

当您使用离线(很可能是移动设备)时,大多数情况下您也需要优化版本。你真的不想离线几十个文件。

我不认为XHR是脱机工作的,所以你通过XHR加载的任何资源(包括脚本,i18n bundle和其他通过href触发的动态加载的资源)你应该存储到localStorage,然后分支加载来自loaclStorage而非离线时的XHR。

现在,如果您在iPhone,iPad或Android设备上运行,那么您真的需要进行优化构建。还可以考虑使用Closure Compiler来进一步优化您的构建。见下面的链接。

http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

答案 1 :(得分:1)

问题是dojo做了一些初始化的XHR请求。它上线获取其本地化包和RPC功能的任何.smd文件。

XHR无法访问脱机applicationCache,即使bundle和smd文件可用,但在Dojo要求时也找不到它们。

另一种方法是将它们留在清单文件之外,但这意味着dojo不会开始脱机。

我们通过将位于.smd文件中的服务规范对象直接添加到dojo.rpc.Service的构造函数来修复.smd文件的问题。这意味着dojo拥有它所需要的一切,而不再需要它。

本地化捆绑包不同。最后,我确保将它们附加到dojo.js的末尾,让dojo.provide语句处理其余部分。从本质上讲,我修改了构建脚本(我们的bat文件),然后将压缩的本地化包放在dojo.js的末尾。

现在dojo可以脱机启动。

答案 2 :(得分:1)

你见过this article at IBM吗?它似乎涵盖了你的问题。

答案 3 :(得分:0)

您是否正在使用HTML5 application cache的清单文件?如果是这样,您需要明确列出要缓存的文件和目录。与所有其他资源一样,您的内置本地化包必须在清单中进行说明,无论是在CACHE部分还是在网络部分