HTML表单离线工作

5
我需要能够离线运行HTML表单。我的意思是,它们必须在没有直接连接到Web服务器的情况下工作。
在我五年前编写的应用程序中,我通过实现自定义协议处理程序来完成这个功能 - 当用户启动表单提交时,生成的HTTP请求会在本地记录。稍后当与服务器的连接可用时,同步程序循环遍历收集的请求并将其提交到服务器,收集响应,并再次保存它们以供以后使用。
那是过去的事了。现在另一个客户向我提出了非常相似的要求。你们认为我今天应该使用什么技术?
对HTML5的支持还非常有限。Google Gears?或者我应该回到使用协议处理程序和自定义同步器?

一个澄清的问题:这是针对大众用户应用程序还是仅限内部使用?您知道用户的浏览器要求吗?如果是内部使用并且您有一定的控制权,您甚至可以考虑制作一个简单的AIR应用程序。Adobe AIR使用Google Gears进行“离线”存储,并且即将推出的版本将会做得更多。 - Joshua
这是一个内部应用程序。使用公司提供的笔记本电脑的人连接到该应用程序,接收要填写的表格,并出发到外面采集信息,通过填写表格来完成。 - mfeingold
5个回答

4
我建议使用HTML5。虽然不是所有浏览器都支持它,但所有浏览器都将支持它。同时,我认为最好说“尝试某些浏览器以获得离线功能”,而不是“请下载这个带有许多可怕警告的庞大插件”。
此外,一个简单的人口统计学数据:HTML5在所有浏览器中占了多少比例?5%?10%?仍然比已安装Gears的用户数量0%要多得多。
这真是遗憾,感谢Google推动Gears的发展;但在野外,唯一被普遍接受的插件是Flash。幸运的是,HTML5几乎已经具备了几乎相同的功能。

2
有传言称Google Gears不再开发。当你查看Gears的功能和问题跟踪器http://code.google.com/p/gears/issues/list?can=2&q=&sort=version&colspec=Version%20Milestone%20Owner%20ID%20Summary%20Component时,只有3个项目将在0.6版本中修复。此外,根据维基百科(http://en.wikipedia.org/wiki/Google_Gears)的一篇文章,似乎Google没有进行任何开发,而这个开源项目也没有太多动力。文章中写道:“2009年11月底,许多在线新闻来源报道说Google将来会转向使用HTML 5而不是Gears。后来,一位Google发言人澄清说,Google将继续支持Gears以避免破坏使用它的网站。”
换句话说,Gears已经被弃用了。请使用HTML 5代替。

2

Google Gears是一个非常好的选择 - 例如,Google最近刚刚宣布用户可以在“离线”时附加文件到电子邮件中。另一种方法可能是将已发布的表单数据存储在cookie中,当用户能够重新联网时,服务器会捕获cookie和其中的数据。


一个cookie是不够的。表格可能包含相当大量的数据,几十个字段。我不想使用cookie来处理它们。 - mfeingold
我明白你的意思。不过要记住,Cookie 可以存储数兆字节的数据,这取决于使用的浏览器。即使有几十个字段也不应该是问题。唯一的问题将会是实际文件数据(如 PDF 上传)。 - Joshua

1

Dojo.Storage/ Dojo Offline,具有Flash桥接器,可以使用Flash的数据存储来存储数据。限制由用户设置,但起始值为5Mb。该库组件是一个抽象层,并且还支持HTML 5、cookies和gears。

此外,如果我没记错的话,gears还允许您存储二进制大对象。


1

Google Gears已经停止使用:http://gearsblog.blogspot.com/2011/03/stopping-gears.html

你最好的选择可能是将HTML5标准的applicationCache和localStorage结合起来使用。

然而,应该谨慎使用applicationCache - 它真的很麻烦。本文解释了为什么,同时提供了一些关于如何使用applicationCache和localStorage混合方法进行离线页面查看(而不是提交)的指导:

http://www.alistapart.com/articles/application-cache-is-a-douchebag/

这里有一篇文章,其中提供了一个将表单数据捕获到localStorage中的示例,但不幸的是它没有提供实际提交离线数据的示例:

http://miniapps.co.uk/blog/post/using-html5-localstorage-as-a-fallback-for-offline-form-submission

此外,要注意使用window.navigator.onLine来检测离线状态 - 它在不同的浏览器中实现不一致,你最好让用户明确告诉你他们是否离线。

-- Chad


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接