使用javascript或jquery创建.ics文件

时间:2013-10-02 12:38:59

标签: javascript jquery icalendar

我正在尝试在用户点击按钮时创建.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中打开它时,我被告知它无法读取该文件。

5 个答案:

答案 0 :(得分:13)

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

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

我更改了下载功能,只需使用以下命令打开文本:

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

我在Github上的分叉是icsFormatter.js

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

答案 1 :(得分:7)

有一个开源项目:

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

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

答案 2 :(得分:4)

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

如果这不能解决问题,您必须向我们展示iCal收到的完整stream流。

最后,假设start_time和end_time使用正确的格式,对于location字段,您可能需要换行(http://tools.ietf.org/html/rfc5545#section-3.1)并转义某些字符(http://tools.ietf.org/html/rfc5545#section-3.3.11)。换句话说,您可能希望查看iCalendar库。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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