javascript 在 Internet Explorer 10 中将文本保存在本地文件中

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18755750/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-27 13:06:28  来源:igfitidea点击:

Saving text in a local file in Internet Explorer 10

javascriptinternet-explorer

提问by kofifus

I need to be able to save a string into a local file. Based on the code in hereI got the following going:

我需要能够将字符串保存到本地文件中。基于这里的代码,我得到了以下内容:

function saveTextAsFile(fileNameToSaveAs, textToWrite) {
var textFileAsBlob = new Blob([textToWrite], {
    type: 'text/plain'
});

var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = "Download File";

if (true) { //window.webkitURL !== null) {
    // Chrome allows the link to be clicked
    // without actually adding it to the DOM.
    downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
} else {
    // Firefox requires the link to be added to the DOM
    // before it can be clicked.
    downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
    downloadLink.onclick = destroyClickedElement;
    downloadLink.style.display = "none";
    document.body.appendChild(downloadLink);
}

downloadLink.click();
}

This works fine for Chrome and Firefox, but not for Internet Explorer 10 as

这适用于 Chrome 和 Firefox,但不适用于 Internet Explorer 10,因为

downloadLink.click();

gives:

给出:

SCRIPT5: Access is denied.

Is there any explanation/solution to this ?

对此有任何解释/解决方案吗?

thanks!

谢谢!

回答by mstubna

IE 10 and 11 use a distinct syntax for downloading or saving blobs to the client machine. Once you've created a blob, use:

IE 10 和 11 使用不同的语法将 blob 下载或保存到客户端计算机。创建 blob 后,请使用:

window.navigator.msSaveBlob(blob, 'file.txt'); 

or

或者

window.navigator.msSaveOrOpenBlob(blob, 'file.txt');

to trigger the file save or file save/open dialog.

触发文件保存或文件保存/打开对话框。

For more info, see http://msdn.microsoft.com/en-us/library/ie/hh673542(v=vs.85).aspx

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ie/hh673542(v=vs.85).aspx

回答by kofifus

Thx to mstubna, here is a solution for Chrome, FF, and IE>9:

感谢 mstubna,这里是 Chrome、FF 和 IE>9 的解决方案:

function saveTextAsFile(fileNameToSaveAs, textToWrite) {
  /* Saves a text string as a blob file*/  
  var ie = navigator.userAgent.match(/MSIE\s([\d.]+)/),
      ie11 = navigator.userAgent.match(/Trident\/7.0/) && navigator.userAgent.match(/rv:11/),
      ieEDGE = navigator.userAgent.match(/Edge/g),
      ieVer=(ie ? ie[1] : (ie11 ? 11 : (ieEDGE ? 12 : -1)));

  if (ie && ieVer<10) {
    console.log("No blobs on IE ver<10");
    return;
  }

  var textFileAsBlob = new Blob([textToWrite], {
    type: 'text/plain'
  });

  if (ieVer>-1) {
    window.navigator.msSaveBlob(textFileAsBlob, fileNameToSaveAs);

  } else {
    var downloadLink = document.createElement("a");
    downloadLink.download = fileNameToSaveAs;
    downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
    downloadLink.onclick = function(e) { document.body.removeChild(e.target); };
    downloadLink.style.display = "none";
    document.body.appendChild(downloadLink);
    downloadLink.click();
  }
}

回答by keemor

For modern browsers solution goes like this, tested: IE11, FF & Chrome

对于现代浏览器,解决方案是这样的,经过测试:IE11、FF 和 Chrome

var csvData = new Blob([arg.data], {type: 'text/csv;charset=utf-8;'});
//IE11 & Edge
if (navigator.msSaveBlob) {
 navigator.msSaveBlob(csvData, exportFilename);
} else {
 //In FF link must be added to DOM to be clicked
 var link = document.createElement('a');
 link.href = window.URL.createObjectURL(csvData);
 link.setAttribute('download', exportFilename);
 document.body.appendChild(link); 
 link.click();
 document.body.removeChild(link); 
}

回答by I. Alexandr

plus for ie EDGE:

加上 IE EDGE:

var ieEDGE = navigator.userAgent.match(/Edge/g);
if (ie || ie11 || ieEDGE) {
    if (ieVer>9 || ieEDGE) {
        var textFileAsBlob = new Blob([textToWrite], {
            type: 'text/plain'
        });
        window.navigator.msSaveBlob(textFileAsBlob, fileName);
    } else {
        console.log("No supported on IE ver<10");
    }
} else { ... }

回答by kali

You can use FileSaverlibrary to achieve that. Easy to use, takes care of browser types and versions. There is an AngularJSversion available as well.

您可以使用FileSaver库来实现这一点。易于使用,照顾浏览器类型和版本。还有一个AngularJS版本可用。