我正在尝试使用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无法识别文件的任何建议?
答案 0 :(得分:-1)
为了解决这个问题,我在服务器端生成了一个iCal文件,并通过RESTful webservice向客户端公开。
为了识别类型日历的响应,我设置了以下内容
ResponseBuilder builder = Response.ok();
builder.header("content-disposition",
"attachment;filename=calendar.ics");
当IE8收到响应时,它会自动尝试使用我的默认Outlook实例下载/打开文件。
这适用于所有浏览器。它确实需要向服务器请求的开销,但它也允许我对请求应用额外的处理,如验证会议室是否有效等。