如何从静态网站生成有效的.ics文件?

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

我想创建一个带有日历条目下载功能的静态html网站,它应该可以在新的浏览器上运行(不需要IE)。

[首先,我尝试了这个js库,以创建一个.ics文件:https://github.com/nwcell/ics.js-我无法使其正常工作...然后,我尝试了一个调整后的叉子,我确实使用以下命令创建和下载了一个文件:https://github.com/matthiasanderer/icsFormatter

我正在Windows 10上对其进行测试,并在MS Outlook中成功打开,但是随后我发现该文件未在Windows日历应用中打开:该错误翻译为:"The event couldn't be opened. Perhaps the calendar file is damaged."Windows Calendar App Error Message


在iPhone上的Safari中,点击下载按钮时也会发生错误:该错误翻译为:"Safari can not load this file."Safari error message


我使用此工具验证了生成的.ics文件:http://ical-validator.herokuapp.com/validate/,调整了JS代码以消除几乎所有错误-而且我不知道这是否是最后一个错误,也不知道如何消除,必不可少:

Specifying the charset in the MIME Content-Type is mandatory

Validation Error我以为MIME类型应该不是问题,因为它是在此行的JS下载功能中定义的:

window.open("data:text/calendar;charset=utf-8," + escape(calendar));

[我也想知道为什么下载在Chrome中工作正常,但是Firefox(V.72)下载文件时文件的结尾是结尾的两倍:.ics.icsDouble file ending


[我希望我可以给文件起一个名字-但我发现做到这一点的唯一方法是在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相似...

javascript icalendar
1个回答
1
投票

你们DTSTART和DTEND都以小写字母z作为后缀而不是大写字母Z

DTSTART:20200229T190000z
DTEND:20200229T230000z

请参见https://tools.ietf.org/html/rfc5545#section-3.3.5

带有UTC时间或绝对时间的日期由拉丁文标识大写字母Z后缀字符(UTC代号)附加到时间值。

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