我们一直在使用Dojo和新浏览器中可用的存储和离线功能开发一个能够脱机的JavaScript应用程序。
应用程序相当大,但它似乎从缓存中加载较大的文件,并且我可以看到应用程序确实被缓存。我们使用了applicationcache功能,在我和Chrome浏览器中没有发现任何错误。
然而,我们遇到了问题。显然,Dojo不能加载它的语言资源,也不能加载描述我们连接到的服务的SMD文件。
这些问题在webkit-mobile上非常明显,这是目标浏览器。
有什么问题吗?
当您使用离线时(很可能是移动设备),大多数时候您也需要优化构建。你不会真的想要离线几十个文件。
我不认为XHR离线工作,所以你通过XHR加载的任何资源(包括脚本,i18n包和其他通过href触发的动态加载的资源),你应该存储到localStorage,然后分支从localStorage加载,而不是XHR离线。
现在,如果你在iPhone, iPad或Android设备上运行,你真的需要做一个优化的构建。还要考虑使用闭包编译器来进一步优化构建。
http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t问题是dojo做了一些初始化XHR请求。它会在线获取本地化包和RPC特性的.smd文件。
XHR不能访问脱机applicationCache,即使bundle和smd文件在那里可用,但是当Dojo请求它们时,它们不会被找到。
另一种选择是将它们留在manifest文件之外,但这意味着dojo无论如何都不会离线启动。
通过将.smd文件中的服务规范对象直接添加到dojo.rpc.Service的构造函数中,我们修复了.smd文件的问题。这意味着dojo拥有了它所需要的一切,而不再需要获取它。
本地化包是不同的。最后,我确保它们被附加到dojo.js的末尾,让dojo。提供声明,剩下的交给你。实际上,我修改了构建脚本(我们的bat文件),以便在构建后将压缩的本地化包放在dojo.js的末尾。
现在dojo可以离线启动
您是否使用HTML5应用程序缓存的清单文件?如果是这样,则需要显式列出要缓存的文件和目录。像所有其他资源一样,您构建的本地化包必须在清单中进行说明,要么在CACHE部分,要么在NETWORK部分