a.download + data:text/plain or Blob でテキストを保存したら改行がLFになった
一行ならCRLF, 改行があるとLFで保存されて困った。
CRLFなので当然環境はWindows
JavaScriptを用いたファイル保存の方法は方法は2つあるようだが、どちらでも同じ問題が出た。
'data:text/plain,' + encodeURIComponent(data)
TEXT保存(コード)Blob + createObjectURL
a[download] と Blob で任意のファイルを作ってダウンロードさせる - slowjet
原因
textarea.value
やnode.textContent
の改行は\n
になる。
\r
が無いので、そのまま保存するとLFとなる
対処
navigator.userAgentでWindowsなら\r\n
に変えてやる
ちなみにtextareaのvalueを直接書き換えても\r
は反映されない
CRLFで保存されるようにしたコード
<textarea id="source"></textarea> <a id="save_source" href="#">save as text</a> <a id="invisible_save_source" aria-hidden="true"></a>
function saveText(ev) { ev.preventDefault() var data = document.getElementById("source").value if ( ~navigator.userAgent.indexOf("Windows") ) { data = data.replace(/\n/g, "\r\n").replace(/\r\r/g, "\r") } var blob = new Blob([data], { type: 'text/plain' }) var url = URL.createObjectURL(blob); var filename = prompt("この名前で保存する", document.title) var fileType = '.txt' var a = document.getElementById("invisible_save_source") a.download = filename + fileType a.href = url if (!filename) { return } a.click() } document.getElementById("save_source").addEventListener("click", saveText, false)
promptのところはオサレなダイアログでも使えばいいと思います。