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

标签 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 header 中设置内容处置来做到这一点,但由于文件是在客户端生成的,因此需要两个额外的跃点来将其上推,保存它,然后使用正确的 header 将其发送回来(如果这可行的话)。

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

最佳答案

找到了解决方案。在 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');
}

关于javascript - 简单客户端应用程序中的文件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20464750/

相关文章:

javascript - Javascript 验证不起作用

javascript - TinyMCE 编辑器不更新 IE11 中的隐藏字段

javascript - jquery使用引用变量

javascript - js文件没有在客户端浏览器上更新

javascript - Meteor:重定向到该页面后,为页面中的字段设置值

Javascript 通过 Outlook Express 打开电子邮件

html - 我可以使用字体大小 : calc(1px * 1vw) to get around compatibility issues?

javascript - 提交不适用于 IE

javascript - 如何将 php 文件中的值包含到 jQuery 中并将其放入 span 元素中?

javascript - 如何让 chrome 自动填充异步帖子