使用javascript或jquery创建.ics文件

使用javascript或jquery创建.ics文件,javascript,jquery,icalendar,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@goog

当用户单击按钮时,我试图创建一个
.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中打开此文件时,我被告知它无法读取该文件

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

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


最后,假设start_time和end_time使用正确的格式,那么对于位置字段,可能需要换行()并转义某些字符()。换句话说,您可能想看看iCalendar库。

有一个开源项目:

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

如果您对文件的工作方式感兴趣,可以查看其源代码。他们使用以下库来执行重载:

我使用了英萨尔亚德提到的解决方案

解决方案的一个问题是Chrome没有正确检测文件类型,并试图用编辑器以文本形式打开文件

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

window.open( "data:text/calendar;charset=utf8," + escape(calendar));
我在Github上的叉子是

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

我使用了smartbart24提到的GPL。但我被要求支持IE到第7版,所以我不得不稍微调整一下


要使用我的icsFormatter fork,您必须在Web服务器上安装PHP4或5。

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

您正在使用的开始时间、结束时间和位置的值是什么?最后,我使用了一个非常好且简单的插件。由于没有定义许可证,因此保留所有权利。为此打开了一个问题。@InSalyadhd此ics.js也不支持6>safari版本。原始版本没有得到很好的维护,并且包含严重的缺陷。这把叉子很结实。用叉子@starlocke是正确的,原始版本几乎不起作用。问题已经更新,指向他在上面评论的同一版本。我编辑了这个答案,指向的似乎是原始版本,现在是维护版本。您可能应该指定日历是什么。我的猜测是,这是isc()的结果。下载('name')?@smartbart24您的fork在iOS上工作吗?这是与原来的一个问题。