Safari では、これを使用して、ユーザーにファイルを ⌘-S するように指示することができます。
window.open('data:text/csv;base64,' + encodeURI($window.btoa(content)));
それ以外の場合、これはFilesaver.jsを使用しますが、問題なく動作します:
var downloadFile = function downloadFile(content, filename) {
var supportsDownloadAttribute = 'download' in document.createElement('a');
if(supportsDownloadAttribute) {
var link = angular.element('<a/>');
link.attr({
href: 'data:attachment/csv;base64,' + encodeURI($window.btoa(content)),
target: '_blank',
download: filename
})[0].click();
$timeout(function() {
link.remove();
}, 50);
} else if(typeof safari !== 'undefined') {
window.open('data:attachment/csv;charset=utf-8,' + encodeURI(content));
} else {
var blob = new Blob([content], {type: "text/plain;charset=utf-8"});
saveAs(blob, filename);
}
}
注:上記のコードにはAngularJSがいくつかありますが、簡単に除外できるはずです...