数据:Internet Explorer无法识别的文本/日历

问题描述 投票:5回答:1

我正在尝试使用JavaScript而动态创建一个ics文件,而无需中间保存。由于最终将运行的平台,我受限于JavaScript并且没有保存。

我是一名新手JavaScript程序员,但我已经拼凑了一些可以在网络上进行大量搜索的工作(几乎)。我提出的内容适用于Chrome,Firefox甚至Opera,但它在Internet Explorer中不起作用。在所有其他浏览器中,我获得了创建和下载的ics文件,但在资源管理器中,我得到"The webpage cannot be displayed",地址栏中显示的整个ics流以下列内容开头:

data:text/calendar;charset=utf8,BEGIN%3AVCALENDAR

“BEGIN”中的所有内容都应该是ics文件的一部分。

在所有其他浏览器中成功启动下载的代码是:

 window.open("data:text/calendar;charset=utf8," + encodeURI(icsMSG));

icsMSG是组成实际ics文件的字符串。

如上所述唯一的问题是,这不适用于IE,因为IE似乎不知道如何处理“data:text/calendar”...或者我可能完全偏离基础,只是不知道我是什么这样做。

如有必要,我可以提供所有代码。

谢谢!

javascript internet-explorer icalendar
1个回答
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中工作,而不必使用服务器下载文件。

© www.soinside.com 2019 - 2024. All rights reserved.