使用javascript或jquery动态创建.ics文件?

使用javascript或jquery动态创建.ics文件?,javascript,outlook,add,icalendar,Javascript,Outlook,Add,Icalendar,有人能告诉我是否有任何jquery插件可以动态创建.ics文件,其中的值来自页面div值,就像 <div class="start-time">9:30am</div> <div class="end-time">10:30am</div> <div class="Location">California</div> 9:30am 上午10:30 加利福尼亚 还是用javascript动态创建.ics文件?我基本上需要创

有人能告诉我是否有任何jquery插件可以动态创建.ics文件,其中的值来自页面div值,就像

<div class="start-time">9:30am</div>
<div class="end-time">10:30am</div>
<div class="Location">California</div>
9:30am
上午10:30
加利福尼亚

还是用javascript动态创建.ics文件?我基本上需要创建.ics文件并使用javascript或jquery提取这些值?并将创建ics文件的链接添加到“添加到日历”链接,以便将其添加到outlook?

这是一个老问题,但我有一些想法可以帮助您开始(或任何其他需要执行类似任务的人)

和JavaScript来创建文件内容,并打开文件:

var filedata = $('.start-time, .end-time, .Location').text();
window.open( "data:text/calendar;charset=utf8," + escape( filedata ) );
您可能希望将该代码添加到表单按钮的onclick事件中

我手头没有Outlook,所以我不确定它是否会自动识别文件类型,但它可能会


希望这能有所帮助。

您需要将其制作成ICS格式。此外,您还需要转换日期和时区;例如,20120315T170000Z或YYYYMMDTHHMMSZ

    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";

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

上面的示例将创建一个ics文件供下载。用户将不得不打开它,而outlock、iCal或google calendar将完成其余的工作。

这种方法工作得很好,但是在IE8中,浏览器无法识别文件类型,拒绝作为日历项打开。为了解决这个问题,我必须在服务器端创建代码(并通过RESTful服务公开),然后设置响应头,如下所示:

@GET
@Path("generateCalendar/{alias}/{start}/{end}")
@Produces({ "text/v-calendar" })
public Response generateCalendar(
        @QueryParam("alias") final String argAlias,
        @QueryParam("start") final String argStart,
        @QueryParam("end") final String argEnd) {
   ResponseBuilder builder = Response.ok();
   builder.header("content-disposition", "attachment;filename=calendar.ics");
   builder.entity("BEGIN:VCALENDAR\n<........insert meeting details here......>:VCALENDAR");
   return builder.build();
}
@GET
@路径(“generateCalendar/{alias}/{start}/{end}”)
@生成({“text/v-calendar”})
公共响应生成日历(
@QueryParam(“别名”)最终字符串argAlias,
@QueryParam(“开始”)最终字符串argStart,
@QueryParam(“结束”)最终字符串(argEnd){
ResponseBuilder=Response.ok();
header(“内容处置”、“附件;文件名=calendar.ics”);
实体(“开始:VCALENDAR\n:VCALENDAR”);
返回builder.build();
}
这可以通过调用服务URL上的window.location来实现,并且可以在Chrome、Firefox和IE8上使用


希望这有帮助

从我在网上和本网站上找到的信息来看,这不可能在IE中使用,因为您需要包含某些标题,以便让IE知道如何下载此文件

window.open方法适用于Chrome和Firefox,但不适用于IE,因此您可能需要重新构造代码,以使用服务器端语言生成和下载ICS文件


更多信息可以在这个

中找到,虽然这是一个较老的问题,但我一直在寻找前端解决方案。我最近偶然发现了
这看起来像是您正在寻找的答案。

供任何人参考:从2013年8月8日起,此代码不起作用。.ics文件下载并打开,但iCal说它无法读取文件并出错:/NOTE:如果删除“\n BEGIN:VEVENT\n”周围的空格,它会工作,但不允许我编辑6个字符以下的内容:(这在iOS上的网络浏览器中有效,但在phonegap中不起作用。)你知道如何实现吗?对于那些想在单独的问题中实现这一点的人,这里:在IE和opera中不起作用请参见