我正在编写一个内部公司网站的代码,其中包括生成和呈现XML文件。这些文件通常不打算直接保存,用户应该很少需要在一开始就原始查看它们。但是,该网站可以在用户计算机上安装的XML处理器中下载并打开文件。
该网站最初是为InternetExplorer6编写的,我正在尝试将其升级为与现代浏览器兼容。它最初使用的与IE6兼容的代码是这样的:
function XmlOpen(path) { // path = "C:/Program Files/path/to/executable.exe", hardcoded
// xmlOutput is a global variable containing the raw XML to be saved
if (xmlOutput) {
// global variable to cache most recently downloaded file. If the XML is regenerated
// this will be reset
if (!xmlTempPath) {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var tempfolder = 2;
var tfolder = fso.GetSpecialFolder(tempfolder);
var tname = fso.GetTempName();
var tempfile = tfolder.CreateTextFile(tname);
tempfile.writeline(xmlOutput);
tempfile.close();
xmlTempPath = tfolder.Path + '\\' + tname;
}
var shell = new ActiveXObject("WScript.Shell");
var cmd = '"' + path + '" "' + xmlTempPath + '"';
shell.Run(cmd);
}
return false;
}
理想情况下,我对重写的要求是,除了最初的点击之外,它需要尽可能少的用户交互。
我的基本方法是使用注册表项标记适当的XML程序,而不是使用ActiveXObjects。这些可以在入职期间安装,也可以在安装我们所有其他内部工具时安装,所以我想我应该能够打开一个url作为
xmlprogram://filename
让它工作,只要我有一个文件。
我也可以很容易地下载一个文件,只需将XML写入一个blob,生成一个随机文件名,并显示下载提示。但我不知道下载文件的文件夹和实际名称,所以我不能用
xmlprogram://
url。因此,我需要以某种方式将文件临时保存在我的javascript知道完整路径的地方,并使用链接在上面调用用户的程序。但据我所知,目前不可能在用户的计算机上写入实际的临时文件,也不能将本地存储视为文件。
tl;dr我如何将临时文件保存到用户的计算机上,以便我知道文件保存的位置,并让他们在不同的程序中自动打开它?