我尝试在没有中间保存的情况下使用JavaScript动态创建ics
文件。我限制使用JavaScript并且没有保存,因为最终会运行该平台。
我是一名新手JavaScript程序员,但我已经拼凑了一些可以(通常)在网络上进行大量搜索的工作。我在Chrome,Firefox甚至Opera中的作品都有用,但它在Internet Explorer中不起作用。在所有其他浏览器中,我获得了创建和下载的ics文件,但在资源管理器中,我得到"The webpage cannot be displayed"
,其中整个ics流显示在地址栏中,从以下开始:
data:text/calendar;charset=utf8,BEGIN%3AVCALENDAR
来自" BEGIN" on是应该成为ics文件一部分的一部分。
在所有其他浏览器中成功启动下载的代码是:
window.open("data:text/calendar;charset=utf8," + encodeURI(icsMSG));
icsMSG
是组成实际ics
文件的字符串。
如上所述,唯一的问题是,这并不适用于IE,因为IE似乎不知道如何处理" data:text/calendar
" ......或者我可能完全不在基地,只是不知道自己在做什么。
如有必要,我可以提供所有代码。
谢谢!
答案 0 :(得分:0)
我在github issues for react-add-to-calendar中找到了一个对我有用的答案:
var blob = new Blob([icsMSG], { type: 'text/calendar;charset=utf-8' });
window.navigator.msSaveOrOpenBlob(blob, 'download.ics');
icsMSG是一个字符串,其中包含应该在ICS文件中的数据(所有从“ BEGIN”开始的内容)。您还可以在another file from this project中使用if语句来测试浏览器是否是IE的旧版本:
if (typeof window !== "undefined" &&
window.navigator.msSaveOrOpenBlob &&
window.Blob) { }
这在Internet Explorer 11中对我有用,而无需使用服务器下载文件。