Javascript 如何提示用户将文本(xml)保存到文件?

Javascript 如何提示用户将文本(xml)保存到文件?,javascript,xml,save-as,Javascript,Xml,Save As,我有一些用XSLT转换XML的javascript代码。现在,我希望用户能够保存新的XML(无论是通过提示还是将新的XML作为文件或其他东西提交给用户,这样用户就可以保存它。有人知道怎么做吗 var xmldoc = new ActiveXObject("Microsoft.XMLDOM"); xmldoc.async = false; xmldoc.loadXML(responseText); // responseText is xml returned from ajax call //a

我有一些用XSLT转换XML的javascript代码。现在,我希望用户能够保存新的XML(无论是通过提示还是将新的XML作为文件或其他东西提交给用户,这样用户就可以保存它。有人知道怎么做吗

var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = false;
xmldoc.loadXML(responseText); // responseText is xml returned from ajax call
//apply the xslt
var xsldoc = new ActiveXObject("Microsoft.XMLDOM");
xsldoc.async = false;
xsldoc.load("../xslt/ExtraWorkRequest.xslt");
var content = xmldoc.transformNode(xsldoc);

如何让用户将XML(内容)保存为文件?

默认情况下,您不能。出于安全原因,浏览器不应访问您的本地磁盘


但是,如果您可以要求用户更改其安全设置(您不应该要求),您可以使用
FileSystemObject
或甚至您的
Microsoft.XMLDOM.Save
方法。默认情况下,您不能。出于安全原因,浏览器不应该访问本地磁盘


但是,如果您可以要求用户更改其安全设置(您不应该要求),您可以使用
FileSystemObject
甚至您的
Microsoft.XMLDOM.Save
方法。

您不能使用默认安全设置的100%客户端JavaScript。您需要实现一些服务器端逻辑。在您的情况下,您还可以在服务器端执行XML转换


使用默认安全设置的100%客户端JavaScript无法完成此操作。您需要实现一些服务器端逻辑。在您的情况下,您还可以在服务器端执行XML转换


您可以使用
应用程序/octet流的媒体类型构建data:URI

function download (data, charset) {
  if (!charset) {
    charset = document.characterSet;
  }
  location.href = ["data:application/octet-stream;charset=",
                   charset, ",", encodeURIComponent(data)
                  ].join("");
}
除IE之外的所有浏览器都支持数据:URI。我认为IE8可能支持它们,但只支持图像。对于IE,一个解决方法是将数据发送到服务器(包括
文档。characterSet
),然后加载一个类似以下标题的页面:

Content-Type: application/xml; charset={document.characterSet}
Content-Disposition: attachment
如果还想为文件命名,请使用
Content-Disposition:attachment;filename=…


此外,要想实现这些功能,您必须首先将XML转换为字符串。

您可以使用
应用程序/octet流的媒体类型构建一个data:URI

function download (data, charset) {
  if (!charset) {
    charset = document.characterSet;
  }
  location.href = ["data:application/octet-stream;charset=",
                   charset, ",", encodeURIComponent(data)
                  ].join("");
}
除IE之外的所有浏览器都支持数据:URI。我认为IE8可能支持它们,但只支持图像。对于IE,一个解决方法是将数据发送到服务器(包括
文档。characterSet
),然后加载一个类似以下标题的页面:

Content-Type: application/xml; charset={document.characterSet}
Content-Disposition: attachment
如果还想为文件命名,请使用
Content-Disposition:attachment;filename=…


此外,要想实现这些功能,您必须首先将XML转换为字符串。

我是通过打开代码片段来实现这一点的(用户可以单击“保存”按钮,代码片段将出现在他们的默认文本编辑器中,他们可以在其中进行调整和/或将其复制到他们的应用程序中)

它的工作原理是将所有文本数据放在一个隐藏字段中,然后将其提交给一个非常简单的服务器端HTTP处理程序。该处理程序只需获取隐藏字段的值,并在响应中使用正确的内容处置头将其吐出,为用户提供打开/保存下载提示


这是我能让它工作的唯一方法。

我使用打开的代码片段来完成这项工作(用户可以单击“保存”按钮,代码片段将出现在他们的默认文本编辑器中,他们可以在那里调整它和/或将它复制到他们的应用程序中)

它的工作原理是将所有文本数据放在一个隐藏字段中,然后将其提交给一个非常简单的服务器端HTTP处理程序。该处理程序只需获取隐藏字段的值,并在响应中使用正确的内容处置头将其吐出,为用户提供打开/保存下载提示


这是我唯一能让它工作的方法。

你想让它在IE以外的任何浏览器上工作吗?你想让它在IE以外的任何浏览器上工作吗?