我想创建一个带有日历条目下载功能的静态html网站,它应该可以在新浏览器上运行(不需要IE)。
首先,我尝试使用此 js 库来创建 .ics
文件:https://github.com/nwcell/ics.js - 我无法让它工作...
然后我尝试了一个调整后的 fork ,我确实可以使用以下命令创建和下载文件:https://github.com/matthiasanderer/icsFormatter
我正在 Windows 10 上对其进行测试,它在 MS Outlook
中成功打开,但随后我注意到该文件未在 Windows 日历应用中打开:
该错误翻译为:“无法打开该事件。可能日历文件已损坏。”
在 iPhone 上的 Safari 中,点击下载按钮时也会出现错误:
该错误翻译为:“Safari 无法加载此文件。”
我使用此工具验证了生成的 .ics
文件:http://ical-validator.herokuapp.com/validate/ ,调整了 JS 代码以消除几乎所有错误 - 我不知道最后一个我不知道如何消除的错误是否是必要的:
Specifying the charset in the MIME Content-Type is mandatory
我认为 MIME
类型不应该是问题,因为它是在 JS-download 函数中定义的:
window.open("data:text/calendar;charset=utf-8," + escape(calendar));
<小时/>
我还想知道为什么下载在 Chrome
中工作正常,但 Firefox
(V.72) 下载的文件的结尾是文件的两倍:。 ics.ics
我希望可以给该文件命名 - 但我发现这样做的唯一方法是 this answer 底部的 .csv 文件。它不起作用 - 我认为 encodeURI
函数破坏了我的换行符或其他东西。
这是我生成的 .ics 文件的内容:
BEGIN:VCALENDAR
PRODID:-//test//cal_events/NONSGML v1.0//DE
VERSION:2.0
BEGIN:VEVENT
UID:b1e4da94-1550-453f-bdee-a085a0b14231
CLASS:PUBLIC
DESCRIPTION:This is the description...
DTSTAMP:20200125T084646Z
DTSTART:20200229T190000z
DTEND:20200229T230000z
LOCATION:Deutschland
SUMMARY:Event Title
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR
<小时/>
看起来像this question类似...
最佳答案
DTSTART 和 DTEND 都有小写 z 作为后缀,而不是大写 Z
DTSTART:20200229T190000z
DTEND:20200229T230000z
参见https://www.rfc-editor.org/rfc/rfc5545#section-3.3.5
The date with UTC time, or absolute time, is identified by a LATIN CAPITAL LETTER Z suffix character, the UTC designator, appended to the time value.
关于javascript - 如何从静态网站生成工作 .ics 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59907734/