Javascript Firefox中的另存为对话框

Javascript Firefox中的另存为对话框,javascript,html,dojo,Javascript,Html,Dojo,我想在用户单击HTML按钮时显示“另存为”对话框。 我正在使用DOJO和JavaScript。 在IE document.exec中,需要进行拯救,但在Firefox中,需要在文件系统中进行更改才能使用NSI 如果您有任何想法,我们将不胜感激。请将HTML按钮href指向未知的文档类型。说文件名.xxxblah 这将自动触发“另存为”对话框。您可以使用数据url强制浏览器下载一些数据: content = "This is the text for downloading"; window.lo

我想在用户单击HTML按钮时显示“另存为”对话框。 我正在使用DOJO和JavaScript。 在IE document.exec中,需要进行拯救,但在Firefox中,需要在文件系统中进行更改才能使用NSI


如果您有任何想法,我们将不胜感激。

请将HTML按钮href指向未知的文档类型。说文件名.xxxblah


这将自动触发“另存为”对话框。

您可以使用数据url强制浏览器下载一些数据:

content = "This is the text for downloading";
window.location.href = "data:application/octet-stream,"+
          encodeURIComponent(content); 

这样做的主要问题是,用户将无法选择文件名,并且生成的文件名是一些随机散列。如果您不介意使用Flash,您可以使用,这将使您能够更好地控制“保存”对话框

这并不完全是您想要的,但据我所知,唯一可靠的方法是在服务器上创建一个服务器端脚本,该脚本将发送正确的头。在PHP中,您可以这样做:

header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="mydocument.csv";' );
header('Content-length: '.(int)strlen($csvData));

print($csvData);
内容类型
是文档的“mime类型”,为了与某些浏览器兼容,这与文件名的扩展名完全匹配非常重要

Content-Disposition:attachment
指示浏览器下载页面,即使它通常不会下载该mime类型的页面,并且您可以提供文件名

Content length
是下载的大小,这是可选的,但如果您希望用户看到下载的进度条,则必须提供它

一些浏览器会显示另存为对话框,而另一些浏览器只会将文件保存到用户首选的下载文件夹中。你无法控制会发生什么