跳转到内容

XForms/保存中间表单数据

来自维基教科书,开放世界中的开放书籍

注意 - 此页面正在开发中

[编辑 | 编辑源代码]

保存中间表单数据

[编辑 | 编辑源代码]

此示例将向您展示如何将中间表单数据保存到本地磁盘。

有时填写长表格需要一段时间。您希望允许用户填写表格的一部分,注销,然后在返回时恢复他们的表格。有时这些中间数据可以作为表单用户频繁重新输入的字段的默认模板使用。

跨域发布的安全问题

[编辑 | 编辑源代码]

默认情况下,XForms 不允许从一个域提供表单,然后在没有用户警告的情况下访问另一个域。这可能会允许一个恶意表单在未经授权的情况下访问本地文件。

这反映在实例中的“src”标签只能引用硬编码的静态字符串这一事实中。如果您从 Web 服务器加载了表单,则无法将本地文件加载到实例中。

请注意,您可以使用支持 file: 类型的 XForms 应用程序(如 FireFox)读取和写入本地文件系统上的本地文件。但表单必须在 XForms 实例 src 属性中静态编码此路径。

步骤 1:保存到客户端

[编辑 | 编辑源代码]

保存实例数据

   <xf:submission id="save-instance-to-client"
      method="put"
      action="file://C:/tmp/xforms/my-data.xml"
      replace="instance"
      instance="my-instance"
    />

步骤 2:从客户端读取

[编辑 | 编辑源代码]

保存实例数据

   <xf:submission id="read-instance-from-client"
      method="get"
      action="file://C:/tmp/xforms/my-data.xml"
      replace="instance"
      instance="my-instance"
    />

请注意,要查找文件,您可以使用 <xf:upload> 控件

   <xf:upload ref="FilePath">
      <xf:mediatype>text/xml</xf:mediatype>
   </xf:upload>

save-instance-to-fileread-instance-from-file 两个 xf:submission 中的 action 属性的值应为一个变量:action="file://C:/tmp/xforms/my-data.xml" 应自动更改为 FilePath 值。

解决方案

[编辑 | 编辑源代码]

要使它正常工作,您必须处理安全问题……

有一篇帖子提到了使用 chrome:// 前缀而不是 file:// 前缀,但没有给出示例。也有一些关于使用 cookie:// 保存到 cookie 的讨论。

参考文献

[编辑 | 编辑源代码]
  • [1] 跨域提交
  • [2] Mark Bireck 的评论
下一页: 三文档加载 | 上一页: 使用 get 和 put 读取和写入
首页: XForms
华夏公益教科书