2013-05-15 85 views
0

我試圖動態生成一個vCal文件使用Javascript和一切工作正常,直到我嘗試在IE8。在IE8中,瀏覽器嘗試在請求欄中打開日曆文件而不是下載。這是我使用Internet Explorer 8和vCalendar/ICS文件

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無法識別文件的任何建議?

回答

-1

爲了解決這個問題,我生成了一個服務器端的iCal文件,並通過RESTful webservice向客戶端公開。

爲了識別的響應類型的日曆我設置以下

ResponseBuilder builder = Response.ok(); 
    builder.header("content-disposition", 
      "attachment;filename=calendar.ics"); 

當IE8接收它會自動嘗試下載/用我的Outlook默認情況下打開的文件中。

這適用於所有瀏覽器。它確實有向服務器請求請求的開銷,但它也允許我對請求進行額外處理,例如驗證會議室是否有效等。

+0

這並不回答他的問題。他想在javascript中生成這個。 – msponagle

+0

是的,但IE瀏覽器在動態生成時無法識別OFT文件,因此需要通過服務器端邏輯來完成。我沒有包含邏輯在JavaScript中執行此操作,因爲該方法目前不是一個完整的解決方案..... – cduggan

+0

也包含上面的代碼可用於所有其他瀏覽器 – cduggan