当我单击另存为 HTML 而不是右键单击浏览器并保存时,如何将 React 单页保存为 HTML

Posted

技术标签:

【中文标题】当我单击另存为 HTML 而不是右键单击浏览器并保存时,如何将 React 单页保存为 HTML【英文标题】:how can i save React single page as HTML when i click on Save as HTML instead for right click on Browser and save it 【发布时间】:2021-05-11 06:42:38 【问题描述】:

    我添加了按钮另存为 html,当我点击它按钮时,我的网页下载为 html,而不是右键单击浏览器并保存。

    当我右键单击浏览器并保存它时,通过单击我的网页上的按钮完成的过程完全相同。

    所以请给我一个活生生的例子或解决方案

【问题讨论】:

嗨,凯文,欢迎来到 SO,如果您想看到您的问题得到解答,我建议您阅读:How to Ask,help center。 【参考方案1】:

假设您有以下 HTML

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Save Demo</title>
</head>

<body>
    <p>Hello World</p>
    <button id="save-btn">Save as HTML</button>
    <script src="app.js"></script>
</body>

</html>

当用户单击按钮时,您希望将页面下载为 HTML 文件。

首先,让我们创建一个可重用的下载函数,它接受一个字符串filename 和一个字符串contents,并创建一个名为filename 的文件,其中包含contents

function download(filename, contents) 
  // Create an anchor tag to download the file
  const anchor = document.createElement('a');
  // Create an href that contains the contents of the file
  // encodeURIComponent encodes a text string as a valid component of a URI
  anchor.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(contents));
  // set the download attribute to download the given filename
  anchor.setAttribute('download', filename);
  // Anchor tag should be invisible
  anchor.style.display = 'none';
  document.body.appendChild(anchor);
  // Fire the event
  anchor.click();
  // Remove the anchor tag
  document.body.removeChild(anchor);

给定"helloworld.txt" 的文件名和"This is a really cool text file" 的内容,该函数将下载具有给定内容的文件helloworld.txt。

现在我们只需要在按钮上创建一个事件监听器,以便在点击时下载 html。

const btn = document.querySelector('#save-btn');

btn.addEventListener('click', (evt) => 
  // create a container for the html
  const container = document.createElement('div');
  // create an html element
  const html = document.createElement('html');
  // set the inner html of the html element to be the inner html of the document (everything except the <html></html>)
  html.innerHTML = document.documentElement.innerHTML;
  // append the html element to the container, to keep the <html></html>
  container.appendChild(html);
  // download the file as index.html
  download('index.html', container.innerHTML);
);

这将下载一个包含 HTML 文件中除 &lt;!DOCTYPE html&gt; 之外的所有内容的文件,您可以通过调用 download 来添加它:

download('index.html', '<!DOCTYPE html>' + container.innerHTML);

【讨论】:

以上是关于当我单击另存为 HTML 而不是右键单击浏览器并保存时,如何将 React 单页保存为 HTML的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以“模拟”右键单击另存为命令或使用 JavaScript 在浏览器中强制下载文件?

我想在用户右键单击时更改另存为对话框文件名

html 表单生成链接。当您需要右键单击并“目标另存为”或制作JavaScript书签时非常有用。

如何为 PHP 生成的图像设置默认的“图像另存为”名称?

怎么把Word转换为网页html格式

强制打开“另存为...”弹出窗口在文本链接处打开单击以获取 HTML 中的 PDF