在新选项卡中将生成的文本作为可保存的 .txt 文件打开

Posted

技术标签:

【中文标题】在新选项卡中将生成的文本作为可保存的 .txt 文件打开【英文标题】:Open generated text as savable .txt file in new tab 【发布时间】:2020-11-25 04:52:22 【问题描述】:

我想生成以下字符串的文本文档:

const rawText = `Today is $new Date()`;

openInNewTabWithDefaultFilename(rawText, "TodaysDate.txt");

我看过一些关于如何打开新标签并设置内容的内容:

var newTab = window.open();
newTab.document.title = "Todays Date";
newTab.document.body.innerhtml = `Today is $new Date()`;

但这会作为带有文本的选项卡打开,而不是作为文本文件打开。我希望用户能够简单地将页面保存为文本文件。

这可能吗?

【问题讨论】:

【参考方案1】:

经过大量研究,这似乎是最好的。

您无法在可保存的新选项卡中打开文本,更不用说具有默认文件名了。

生成可以查看然后保存的文本文件的唯一方法是使用数据 url,但 Google 错误地将它们全部视为安全威胁(某些是,text/plain 绝对不是) .

我发现的最佳解决方法是创建两个按钮/链接,一个用于下载文件,另一个用于查看文件。

如果您想预先生成文件,可以这样做

<a id="DownloadTextFile" download="TodaysDate.txt">Download</a>
<a id="ViewTextFile">View</a>

<script>
const blob = new Blob([`Today is $new Date()`],  type: "text/plain" );
const url = URL.createObjectURL(blob);

const view = document.getElementById("ViewTextFile");
const download = document.getElementById("DownloadTextFile");
view.href = download.href = url;
</script>

如果您想在点击时生成(示例由于缺少 *** iframe 权限而无法工作)

const byId = (id) => document.getElementById(id);

byId("ViewTextFile").addEventListener("click", () => 
  serveTextFile(`Today is $new Date()`);
)

byId("DownloadTextFile").addEventListener("click", () => 
  serveTextFile(`Today is $new Date()`, "TodaysDate.txt");
);

function serveTextFile(text, downloadAs) 
  const blob = new Blob([text],  type: "text/plain");
  const url = URL.createObjectURL(blob);

  const domNode = document.createElement('a');
  downloadAs && (domNode.download = downloadAs);
  !downloadAs && (domNode.target = "_blank");
  domNode.href = url;
  domNode.style.display = 'none';
  document.body.appendChild(domNode);
  domNode.click();
  document.body.removeChild(domNode);
<div id="DownloadTextFile">Download</div>
<div id="ViewTextFile">View</div>

【讨论】:

以上是关于在新选项卡中将生成的文本作为可保存的 .txt 文件打开的主要内容,如果未能解决你的问题,请参考以下文章

在可排序选项卡中将文本框的值更改为其当前顺序

TabControl - 在新选项卡中加载默认 UI 元素

如何在Delphi中将诸如TMemo等文本控件的内容保存为TXT文件?

如何在新选项卡中打开时重命名保存在服务器上的pdf

使用ajax在新选项卡中打开文件

在批处理文件中将文本文件上传到FTP,该文件具有随机生成的文件名