2010-11-17 104 views
4

我试图在JavaScript中设置一个打包的web应用程序的导出功能,将存储在localStorage中的字符串转换为纯文本文件进行下载。由于JavaScript无法访问计算机的文件系统,因此我想设置它以便它创建一个空白文本文件(或者,如果失败,则是一个简单的HTML页面)并在Web浏览器中打开;因为它不会访问任何文件系统,我希望这是可能的。使用JavaScript创建导出功能?

我想使用数据URI方案打开localStorage的纯文本,如下面的:

function exportFile() { 
window.open("data:text/plain;charset=utf-8," + localStorage.WebAppData); 
}; 

但它比我预想的要慢得多,这是我的猜测是因为它坚持全文档在URL框中。虽然可能不是代码问题,但某些网络浏览器(如Google Chrome)不会让我保存生成的文件。 (因为某些原因,所有的换行符都变成了空格......)

任何建议来解决这些问题或更好的方式来做类似的功能将不胜感激!

回答

2

你尝试类似:

window.open("data:text/plain;charset=utf-8," + localStorage.WebAppData); 

对于下载,我猜你需要往返到服务器时,将设置一个MIME /类型,这将使​​下载框弹出。

编辑
如果使用localStorage,可能是window.postMessage是在你的环境中可用,并可能有助于速度。

+0

谢谢。这解决了这个问题,但仍然有一些我想解决的问题。我已经更新了适合的问题。 – 2010-11-17 11:18:16

0

不是一个真正的解决方案,而不是一个变通办法,但你的问题,并通过@Mic的回答使我沿着这条路:

只需使用data:text/html的,那么你可以把换行符使用<br />

  1. 我尝试了一切(unicode字符等的所有组合)来获取text/plain中的换行符,但无法让它们显示出来。 document.write()document.body.textContent()等也遭受同样的问题。换行符会被忽略。
  2. 由于Chrome不会让您保存弹出窗口无论如何,让文字在它外面是复制和粘贴的唯一途径,所以没有使用的好处text/plain超过text/html
  3. 在Web浏览器,可以让您保存页面(Firefox)可以选择将页面保存为文本而不是HTML,因此您仍然可以获得相同的最终结果。

编辑:这种方法适用于Chrome浏览器,而不是Firefox的

win = window.open("", "win") 
win.document.body.innerText = "Line \n breaks?" 

不得不使用innerText虽然。 InnerHTMLtextContent删除换行符。这对两个作品:

win = window.open("", "win") 
win.document.body.innerHTML = "<pre>Line \n breaks?</pre>" 

所以也许你可以把所有东西都包裹在<pre>标签?虽然我猜这两个问题都与“
”的建议有相同的“问题”,因为它实际上是在创建一个HTML文档,而不是文本/普通文档。

1

为了保持与window.open可以将您的数据包与是encodeURI导出的数据线游:

var data1 = "Line \n break. And \r\n another one"; 
window.open("data:application/octet-stream, " + encodeURI(data1)); 

否则,你可以与BTOA功能导出base64编码数据:

var data1 = "Line \n break. And \r\n another one"; 
window.open("data:application/octet-stream;base64, " + btoa(data1));