下载变量

时间:2009-07-13 16:20:48

标签: javascript

在Javascript中,是否有可能提示用户下载一个实际上不在服务器上的文件,而是包含脚本变量的内容?

精神上的东西:

var contents = "Foo bar";
invoke_download_dialog(contents, "text/plain");

干杯,

MH

6 个答案:

答案 0 :(得分:4)

javascript:URI应该适用于此 - 事实上,这正是它们的意思。但是,IE不支持type属性,而在Safari中这种技术根本没有效果。

数据:URI可以在Firefox(3.0.11)和Safari(4.0)(以及其他兼容的浏览器)中运行,但是我无法在IE(8.0)中使用这种方法。 (全部在Windows中测试)

<a href="data:text/plain,The%20quick%20brown%20fox%20jumps%20over%20the%20lazy%20dog.">Data URI</a>

这本身不是JS解决方案,但JS可用于动态设置href。使用escape函数将原始文本/数据转换为URI编码形式。

将此与检测IE并使用已经链接的IE特定解决方案相结合可能会做你想要的......

我将补充说,你不能强制它触发下载对话框(这超出了HTML和JS的范围),但你可以通过将application / octet-stream设置为类型来说服它。麻烦的是用户必须手动添加正确的文件扩展名。

答案 1 :(得分:2)

查看我的问题here的已接受答案。这只能在IE浏览器中使用。

答案 2 :(得分:2)

一个可能的选择是使用JavaScript使用data:URL方案生成带有href的链接,这可能需要一些精确的编码才能正常启动。

答案 3 :(得分:1)

不是专门通过javascript,但您可以将变量的值发布到服务器端页面,这会强制用户将内容下载为文本。

答案 4 :(得分:1)

请注意,如果页面上存在任何跨站点脚本漏洞,则该变量可能会被恶意数据覆盖。尽管仍然需要为可执行文件绕过生成的文件的内容类型,但仍然存在风险。

我认为更安全的方法是使用Joel的答案并在发布数据之前对其进行验证。

答案 5 :(得分:0)

查看jsPDF;它允许下载(或嵌入查看)完全在浏览器内生成的PDF文件。他们声称:“客户端演示在Safari或iPhone Safari中效果最佳。还可以在Windows上使用Firefox 3,在Opera上使用IE.IE支持。”因此,他们似乎掌握了如何在主流浏览器中调用下载。