23

文字列をローカル ファイルに保存できるようにする必要があります。ここにあるコードに基づいて、次のようになりました。

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();
}

これは Chrome と Firefox では正常に機能しますが、Internet Explorer 10 では機能しません。

downloadLink.click();

与えます:

SCRIPT5: Access is denied.

これに対する説明/解決策はありますか?

ありがとう!

4

5 に答える 5

33

IE 10 と 11 は、BLOB をクライアント マシンにダウンロードまたは保存するために、異なる構文を使用します。BLOB を作成したら、次を使用します。

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

また

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

ファイルの保存またはファイルの保存/開くダイアログをトリガーします。

詳細については、 http://msdn.microsoft.com/en-us/library/ie/hh673542( v=vs.85 ).aspx を参照してください。

于 2014-01-04T23:13:13.043 に答える
33

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();
  }
}
于 2014-11-27T00:12:32.717 に答える
9

最新のブラウザーの場合、ソリューションは次のようになり、テスト済み: 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);	
}

于 2016-03-25T14:28:11.603 に答える
3

プラスすなわち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 { ... }
于 2015-09-04T22:53:04.897 に答える
0

FileSaverライブラリを使用してそれを実現できます。使いやすく、ブラウザの種類とバージョンを管理します。AngularJSバージョンも利用できます。

于 2016-10-14T09:21:21.657 に答える