我正在尝试使用Javascript动态生成vCal文件,在我尝试使用IE8之前,一切都运行得很好。在IE8中,浏览器会尝试在请求栏中打开日历文件,而不是下载。这是我使用的代码示例
var iCal =
"BEGIN:VCALENDAR\n" +
"PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN\n" +
"METHOD:PUBLISH\n" +
"BEGIN:VEVENT\n" +
"ATTENDEE;CN=\""+locationAlias+"\";CUTYPE=RESOURCE;ROLE=NON-PARTICIPANT;RSVP=TRUE:mailto:"+locationEmail+"\n" +
"DTEND;TZID=\"GMT Standard Time\":"+dend+"\n" +
"DTSTART;TZID=\"GMT Standard Time\":"+dstart+"\n" +
"LOCATION:"+locationName+"\n" +
"ORGANIZER;CN=\"<someuser>\":mailto:<somemailto>\n" +
"END:VEVENT\n" +
"END:VCALENDAR";返回iCal;
然后,我尝试使用以下命令打开日历文件;
window.open( "data:text/calendar;charset=utf8," + escape( iCal) );关于IE8无法识别该文件的原因,有什么建议吗?
发布于 2013-07-08 18:14:24
为了解决这个问题,我在服务器端生成了iCal文件,并通过RESTful get服务向客户端公开。
为了将响应标识为日历类型,我设置了以下内容
ResponseBuilder builder = Response.ok();
builder.header("content-disposition",
"attachment;filename=calendar.ics");当IE8收到响应时,它会自动尝试使用我的默认Outlook实例下载/打开该文件。
这适用于所有浏览器。它确实有向服务器请求请求的开销,但是它也允许我对请求应用额外的处理,比如验证会议室是否有效等。
https://stackoverflow.com/questions/16566300
复制相似问题