【问题标题】:How to generate working .ics file from static website?如何从静态网站生成工作 .ics 文件?
【发布时间】:2020-01-25 08:50:17
【问题描述】:

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

首先我尝试了这个 js 库来创建一个 .ics 文件:https://github.com/nwcell/ics.js - 我无法让它工作......
然后我尝试了一个调整后的 fork,我确实可以创建并下载一个文件:https://github.com/matthiasanderer/icsFormatter

我正在 Windows 10 上对其进行测试,它在 MS Outlook 中成功打开,但后来我注意到该文件没有在 Windows 日历应用程序中打开:
错误转换为:"The event couldn't be opened. Perhaps the calendar file is damaged."


在 iPhone 上的 Safari 中,点击下载按钮时也会出现错误:
错误转换为:"Safari can not load this file."


我用这个工具验证了生成的.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 很相似...

【问题讨论】:

  • 可能与问题无关,但应该是.ics,而不是.isc
  • @Barmar thx - 我总是把它弄混,我更正了它 - 不幸的是它没有相关性:D

标签: javascript icalendar


【解决方案1】:

DTSTART 和 DTEND 都有一个小写的 z 作为后缀,而不是大写的 Z

DTSTART:20200229T190000z
DTEND:20200229T230000z

https://www.rfc-editor.org/rfc/rfc5545#section-3.3.5

带有 UTC 时间或绝对时间的日期由 LATIN 标识 大写字母 Z 后缀字符,UTC 指示符,附加到 时间价值。

【讨论】:

  • Thx,该文件现在可以在 iPhone 上运行,但仍然不能在 windows 日历应用程序上运行,但是 - 奇怪的是 - 它正在另一台电脑上的 windows 日历应用程序上运行。所以我想这不是文件的错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多