将字段值保存到桌面上的文件

save a field value to a file on desktop

我正在 "ServiceNow" 开发自定义应用程序,需要 Javascript 和 HTML 编码。所以,我的表单上有一个字段 "description"。如何将此字段的值保存到桌面上的 word 文档中?

Javascript 保护客户端免受想要读取其计算机上的文件的恶意服务器的侵害。因此,除非您使用某种隐式请求用户许可的文件上传控件,否则您无法使用 javascript 读取或写入客户端计算机的文件。

虽然 JavaScript 无法自行创建供您下载的文件,但 ServiceNow 确实有办法让您创建文件。如果不使用 MID 服务器和一些自定义 Java 代码,创建 Word 文档是不可能的,但是如果任何文件类型都可以,您可以使用导出 URL 创建一个 Excel 文件。为了对此进行测试,我在开发人员实例 运行 Helsinki 中对问题 table 进行了 UI 操作。我制作了一个列表视图,其中只包含我想保存的字段,然后在 UI 操作中使用了以下代码:

    function startDownload() {
    window.open("https://dev13274.service-now.com/problem_list.do?EXCEL&sysparm_query=sys_id%3D" + 
        g_form.getUniqueValue() + "&sysparm_first_row=1&sysparm_view=download");
}

当使用 UI 操作时,它会打开一个新选项卡,该选项卡几乎会立即关闭并提示用户保存或打开包含该单个字段内容的 Excel 文件。

如果您想详细了解从 ServiceNow 导出数据的不同方式,请查看 subject 上的维基页面。

您可以使用 HTML5 FileSystem API 来实现

window.requestFileSystem(window.PERSISTENT, 1024*1024, function (fs) {
  fs.root.getFile('file.txt', {create: true}, function(fileEntry) {
    fileEntry.createWriter(function(fileWriter) {
      var blob = new Blob([description.value], {type: 'text/plain'});
      fileWriter.write(blob);
    });
  });
});

仅供参考,chrome 支持 webkitRequestFileSystem

或者,使用 Blob 并生成下载 link

var text = document.getElementById("description").value;
var blob = new Blob([text], {type:'text/plain'});
var fileName = "test.txt";

var downloadLink = document.createElement("a");
downloadLink.download = fileName;
downloadLink.href = window.webkitURL.createObjectURL(textFile);
downloadLink.click();