25

.ics当用户单击按钮时,我正在尝试创建文件。

到目前为止,我拥有的代码是

msgData1 = $('.start-time').text();
msgData2 = $('.end-time').text();
msgData3 = $('.Location').text();

var icsMSG = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Our Company//NONSGML v1.0//EN\nBEGIN:VEVENT\nUID:me@google.com\nDTSTAMP:20120315T170000Z\nATTENDEE;CN=My Self ;RSVP=TRUE:MAILTO:me@gmail.com\nORGANIZER;CN=Me:MAILTO::me@gmail.com\nDTSTART:" + msgData1 +"\nDTEND:" + msgData2 +"\nLOCATION:" + msgData3 + "\nSUMMARY:Our Meeting Office\nEND:VEVENT\nEND:VCALENDAR";

$('.button').click(function(){
    window.open( "data:text/calendar;charset=utf8," + escape(icsMSG));
});

这会下载一个.ics文件,但是当我尝试在 iCal 中打开它时,我被告知它无法读取该文件。

4

5 回答 5

24

我使用了InsanelyADHD提到的 ics.js 解决方案。

该解决方案的一个问题是 Chrome 未正确检测文件类型,并尝试使用编辑器将文件作为文本打开。

我更改了下载功能以简单地打开文本:

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

我在 Github 上的 fork 是icsFormatter.js

关于许可证:我已经联系了原作者以包含 GPL - 之后我也会包含一个。

于 2014-11-08T14:55:52.760 回答
8

为此有一个开源项目:

它是 100% JavaScript,适用于除 IE 9 及以下版本之外的所有现代浏览器。

如果您对它们如何使文件工作感兴趣,可以查看它们的来源。他们使用以下库来执行繁重的工作:

于 2013-10-11T18:43:55.523 回答
4

组织者地址有两个冒号:“MAILTO::me@gmail.com”

如果这不能解决问题,您必须向我们展示完整的 ical 流,因为它是由 iCal 接收的。

最后,假设 start_time 和 end_time 使用正确的格式,对于位置字段,您可能需要换行(https://www.rfc-editor.org/rfc/rfc5545#section-3.1)并转义某些字符(https://www.rfc-editor.org/rfc/rfc5545#section-3.3.11)。换句话说,您可能想查看 iCalendar 库。

于 2013-10-03T08:00:40.533 回答
2

ics.js 对我不起作用,因为我从数据库异步加载数据。然后我切换到ical.js并结合 ics.js 的 saveAs 函数,它工作了。如果这里有人遇到同样的问题,请随时给我发短信,然后我将提供一个示例

于 2019-08-12T11:02:20.090 回答
0

我使用了 smartbart24 提到的icsFormatter 。但是我需要支持 IE 到版本 7,所以我不得不稍微调整一下。

要使用icsGen,我的 icsFormatter 分支,你必须在你的网络服务器上安装 php 4 或 5。

于 2015-03-21T13:49:53.087 回答