我工作的一个基于JS的应用程序,做了一些复杂的工作,并记录在<div>
的一些信息(实际上,多达数百行)。
我的目标是有一个“保存日志”按钮,触发浏览器的下载对话框来保存我的日志记录<div>
的内容。
更简洁,这是此功能的要求:
- 最终用户必须对文件的完全控制。他/她应该能够保存/存档以供将来参考,将其邮寄给支持部门以获得帮助以解决某些问题,将其重新加载到应用程序中等。因此,HTML5的Web Storage API在这里没有帮助(数据会保存到浏览器定义的位置,除了创建它的JS之外,不会轻易检索到)。
- 应用程序必须能够脱机工作(至少在某些情况下)。这和效率是我放弃将数据发布到服务器以通过“Content-disposition”标题取回数据的原因。
- 该文件应该被正确标记为
text/plain
,因此浏览器可以像使用普通文件下载一样建议默认操作(如“在记事本中打开”)。这可以被看作是第一个要求的一个特定方面。 - 告诉用户将
<div>
的内容复制粘贴到一个文本编辑器中并从那里保存是绝对可怕的,正是我试图避免的原因。
我一直在搜索这个网站,在WHATWG和W3C的网站和一般的网络上没有成功。这是可行的吗?
我得到的距离最近的是使用data:
网址。我第一次尝试执行POST操作时,无法获得内容类型,因此它会回退到UA的启发式。通过将<a>
链接样式化为看起来像一个按钮并给它一个type
属性,我得到了稍微好一点,但是然后UA将太智能并且呈现内容而不是保存(并且要求用户将文件从浏览器保存到该步骤比采用复制粘贴方法变得更糟,因为页面保存在浏览器之间变化很大)。
如果只有某种方式可以将data:
url与“内容处置”类似的提示结合起来,那么事情可能会非常顺利。
问候, Herenvardo
正在使用Flash之类的插件吗?我不知道是否可以使用标准的HTML,但如果Flash是一个选项,它会很容易... – 2010-07-28 23:02:51
我有一个类似的问题http://stackoverflow.com/questions/2832392/can-you- do-file-io-using-javascript-without-activex但只有一个答案。但我认为这是不可能的。 – 2010-07-28 23:26:50
“用代码复制到剪贴板并告诉用户将它粘贴到记事本(或最喜欢的文本编辑器)”的想法出现了吗?剪贴板可以处理兆字节,但记事本可能会在几兆字节上窒息。另一方面:请参阅http://stackoverflow.com/questions/17836273/export-javascript-data-to-csv-file-without-server-interaction – TWiStErRob 2014-02-18 09:35:29