简单的客户端应用程序中的文件处理

时间:2013-12-09 06:48:25

标签: javascript jquery internet-explorer icalendar

需要有关在Javascript应用程序中处理简单文件下载(.ics)的选项的建议。

假设s.icsMsg是格式正确的文本/日历字符串,以下内容适用于Chrome:

var downloadLink = document.createElement("a");
downloadLink.href = 'data:text/calendar;charset=utf-8,' + s.icsMsg; 
downloadLink.download = "Calendar.ics";
document.body.appendChild(downloadLink); 
downloadLink.click();
document.body.removeChild(downloadLink);

下载文件,正确命名并打开邮件客户端。在IE 9+中,我得到数据区域大小错误。

有没有办法在IE中实现这一点,纯粹是在客户端?我知道我可以通过在http标头中设置内容配置来实现,但由于文件是在客户端生成的,因此需要两个额外的跃点来推送它,保存它,然后用正确的标头发送回来(如果这甚至可以工作)。

任何建议都会很棒......

1 个答案:

答案 0 :(得分:0)

找到解决方案。在IE10 / 11中工作正常,任何事先我只是没有显示触发此功能的链接。认为大多数用户将在移动设备上,因此旧的IE将不会成为问题。

对于非IE浏览器会使用window.open(),但无法找到如何设置文件名。虽然没有分阶段,但一切正常。

if (!s.isIE) {
    var downloadLink = document.createElement("a");
    downloadLink.href = 'data:text/calendar;charset=utf-8,\r\n' + escape(s.icsMsg);
    downloadLink.download = "Calendar.ics";
    document.body.appendChild(downloadLink);
    downloadLink.click();
    document.body.removeChild(downloadLink);
}
else {
    var blob = new Blob([s.icsMsg]);
    window.navigator.msSaveOrOpenBlob(blob, 'Calendar.ics');
}
相关问题