Javascript 如何使浏览器显示一个";“另存为对话框”;那么用户可以将字符串的内容保存到系统上的文件中?

Javascript 如何使浏览器显示一个";“另存为对话框”;那么用户可以将字符串的内容保存到系统上的文件中?,javascript,save,savefiledialog,Javascript,Save,Savefiledialog,如何使浏览器显示“另存为对话框”,以便用户可以将字符串内容保存到其系统上的文件中 例如: var myString = "my string with some stuff"; save_to_filesystem(myString,"myString.txt"); 结果是这样的: 万一有人还在想 我是这样做的: 不记得我的来源,但它使用以下技术/功能: html5下载属性 数据uri的 找到引用: 编辑: 正如您可以从评论中收集到的,这不适用于 Internet Explorer(可在

如何使浏览器显示“另存为对话框”,以便用户可以将字符串内容保存到其系统上的文件中

例如:

var myString = "my string with some stuff";
save_to_filesystem(myString,"myString.txt");
结果是这样的:


万一有人还在想

我是这样做的:

不记得我的来源,但它使用以下技术/功能:

  • html5下载属性
  • 数据uri的
  • 找到引用:


    编辑: 正如您可以从评论中收集到的,这不适用于

  • Internet Explorer(可在Edge v13中使用)
  • iOS野生动物园
  • 迷你歌剧院

  • 万一有人还在想

    我是这样做的:

    不记得我的来源,但它使用以下技术/功能:

  • html5下载属性
  • 数据uri的
  • 找到引用:


    编辑: 正如您可以从评论中收集到的,这不适用于

  • Internet Explorer(可在Edge v13中使用)
  • iOS野生动物园
  • 迷你歌剧院
  • 使用execComand:

    <input type="button" name="save" value="Save" onclick="javascript:document.execCommand('SaveAs','true','your_file.txt')">
    
    
    
    在下一个链接中:

    使用execComand:

    <input type="button" name="save" value="Save" onclick="javascript:document.execCommand('SaveAs','true','your_file.txt')">
    
    
    
    在下一个链接中:

    有一个javascript库用于此,请参阅

    但是
    saveAs()
    函数不会向浏览器发送纯字符串,您需要将其转换为
    blob

    function data2blob(data, isBase64) {
      var chars = "";
    
      if (isBase64)
        chars = atob(data);
      else
        chars = data;
    
      var bytes = new Array(chars.length);
      for (var i = 0; i < chars.length; i++) {
        bytes[i] = chars.charCodeAt(i);
      }
    
      var blob = new Blob([new Uint8Array(bytes)]);
      return blob;
    }
    

    当然,请记住使用

    在您的网页上包含上述javascript库。有一个javascript库用于此,请参阅

    但是
    saveAs()
    函数不会向浏览器发送纯字符串,您需要将其转换为
    blob

    function data2blob(data, isBase64) {
      var chars = "";
    
      if (isBase64)
        chars = atob(data);
      else
        chars = data;
    
      var bytes = new Array(chars.length);
      for (var i = 0; i < chars.length; i++) {
        bytes[i] = chars.charCodeAt(i);
      }
    
      var blob = new Blob([new Uint8Array(bytes)]);
      return blob;
    }
    

    当然,请记住,使用HTML5
    saveAs
    功能的跨浏览器javascript实现,可以在网页上包含上述javascript库:


    如果您只想保存文本,则上述脚本可以在所有浏览器(包括IE的所有版本)中工作,只需使用JS。

    这可以使用HTML5
    saveAs
    功能的跨浏览器javascript实现:


    如果您只想保存文本,则上述脚本可在所有浏览器(包括IE的所有版本)中运行,只需使用JS。

    有一个名为的新规范,允许您正确执行此操作,如:


    有一个演示,但我相信它使用的是origin试用版,所以除非您注册或启用配置标志,否则它可能无法在您自己的网站上运行,这是显而易见的。如果您正在制作电子应用程序,这可能是一个选项。

    有一个名为的新规范,允许您正确地执行此操作,如:


    有一个演示,但我相信它使用的是origin试用版,所以除非您注册或启用配置标志,否则它可能无法在您自己的网站上运行,这是显而易见的。如果您正在制作一个电子应用程序,这可能是一个选项。

    仅使用javascript的解决方案

    function saveFile(fileName,urlFile){
        let a = document.createElement("a");
        a.style = "display: none";
        document.body.appendChild(a);
        a.href = urlFile;
        a.download = fileName;
        a.click();
        window.URL.revokeObjectURL(url);
        a.remove();
    }
    
    let textData = `El contenido del archivo
    que sera descargado`;
    let blobData = new Blob([textData], {type: "text/plain"});
    let url = window.URL.createObjectURL(blobData);
    //let url = "pathExample/localFile.png"; // LocalFileDownload
    saveFile('archivo.txt',url);
    

    仅使用javascript的解决方案

    function saveFile(fileName,urlFile){
        let a = document.createElement("a");
        a.style = "display: none";
        document.body.appendChild(a);
        a.href = urlFile;
        a.download = fileName;
        a.click();
        window.URL.revokeObjectURL(url);
        a.remove();
    }
    
    let textData = `El contenido del archivo
    que sera descargado`;
    let blobData = new Blob([textData], {type: "text/plain"});
    let url = window.URL.createObjectURL(blobData);
    //let url = "pathExample/localFile.png"; // LocalFileDownload
    saveFile('archivo.txt',url);
    

    您可以在这里找到答案:@ArnarYngvason这与在angularjs中执行此操作的过程相同吗?@bleykFaust,所有前端js应用程序的过程都相同。您可以在这里找到答案:@ArnarYngvason这与在angularjs中执行此操作的过程相同吗?@bleykFaust,所有前端js应用程序的过程都是一样的。这只是将“myString.txt”保存到我的下载文件夹中,没有显示对话框。啊,不,我没有!它们都自动保存。那么,这始终是每浏览器功能,还是有一种方法可以通过脚本触发行为?我相信这是每浏览器功能。在chrome中,您可以在“设置”、“高级设置”复选框“下载前询问保存每个文件的位置”中进行设置。在正常情况下,无法获取Win32 SaveAs对话框。最好的方法是使用用户输入的文件名。这只是将“myString.txt”保存到我的下载文件夹中,而不显示对话框。啊,不,我没有!它们都自动保存。那么,这始终是每浏览器功能,还是有一种方法可以通过脚本触发行为?我相信这是每浏览器功能。在chrome中,您可以在“设置”、“高级设置”复选框“下载前询问保存每个文件的位置”中进行设置。在正常情况下,无法获取Win32 SaveAs对话框。最好的方法是使用用户输入的文件名。从2019年1月起,它可以在(非iOS)Android浏览器Safari中使用。仍然没有iOS Safari、Opera Mini或IE@SeanKPS。尽管有浏览器设置,但您可以强制它提示用户输入保存它的文件夹吗?嗯,它很现代,很短,而且很有效。但是,它不再提供“另存为…”对话框。我希望用户能够在保存之前更改文件名。在win7 chrome 79中,依赖于浏览器设置。如果用户未选中“下载前询问每个文件的保存位置”,它将直接下载。现在最好的方法(2021年5月)似乎是此处详述的文件系统访问API:自2019年1月起,它在Android浏览器(非iOS)Safari中工作。仍然没有iOS Safari、Opera Mini或IE@SeanKPS。尽管有浏览器设置,但您可以强制它提示用户输入保存它的文件夹吗?嗯,它很现代,很短,而且很有效。但是,它不再提供“另存为…”对话框。我希望用户能够在保存之前更改文件名。在win7 chrome 79中,依赖于浏览器设置。如果用户未选中“下载前询问每个文件的保存位置”,它将直接下载。现在最好的方法(2021年5月)似乎是此处详述的文件系统访问API:在2021年5月解决此问题,这似乎是最简单的方法:。请注意,自最初发布后,API已发生更改。请参阅这篇有用的文章:2021年5月,这似乎是最简单的方法:。请注意,自最初发布后,API已发生更改。请参阅这篇有用的文章: