2014-02-21 36 views
6

我從生成一個JS的.ics日曆條目,然後我打開它使用數據URI:的JavaScript生成的.ics文件中的Chrome和Firefox打開,但不是在IE

window.open("data:text/calendar;charset=utf8," + escape(icsMSG)); 

在哪裏「 icsMSG「是動態生成的.ics文件。下面是從一個的console.log輸出樣本:

BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:-//www.jungledragon.com//NONSGML v1.0//EN 
BEGIN:VEVENT 
UID:[email protected] 
DTSTAMP:20140321T153010Z 
ATTENDEE;CN=My Self ;RSVP=FALSE 
CATEGORIES:APPOINTMENT 
DTSTART:20140321T153010Z 
DTEND: 
LOCATION:5384 DA Heesch, The Netherlands 
SUMMARY:JungleDragon Daylight Event 
DESCRIPTION:Hey you! \n \n At this time in your calendar light conditions are great for the location you selected:\n \nhttp://www.ignore.org/apps/jd3/daylight#date=1392996610000&lat=51.73171&long=5.527827000000002\n\nHappy shooting, and be sure to share your wildlife photos back to http://www.jungledragon.com\nCheers,\nThe JungleDragon Team 
END:VEVENT 
END:VCALENDAR 

原始輸出將具有\ n字符的每一行的末尾,按照本說明書中。

上面的示例工作正常,當我從Chrome或Firefox運行它,在這兩種情況下,它會打開我的默認日曆應用程序(Outlook 2013)。在IE(11)和Opera中,反而發生了一些奇怪的事情。打開一個新選項卡,其中包含上述字符串作爲URL,所有特殊字符都是URL轉義的。像這樣:

data:text/calendar;charset=utf8,BEGIN%3AVCALENDAR%0AVERSION%3A2.0%0APRODID%3A-//www.jungledragon.com//NONSGML%20v1.0//EN%0ABEGIN%3AVEVENT%0AUID%[email protected]%0ADTSTAMP%3A20140321T153043Z%0AATTENDEE%3BCN%3DMy%20Self%20%3BRSVP%3DFALSE%0ACATEGORIES%3AAPPOINTMENT%0ADTSTART%3A20140321T153043Z%0ADTEND%3A%0ALOCATION%3A5384%20DA%20Heesch%2C%20The%20Netherlands%0ASUMMARY%3AJungleDragon%20Daylight%20Event%0ADESCRIPTION%3AHey%20you%21%20%20%20%5Cn%20%5Cn%20%20At%20this%20time%20in%20your%20calendar%20light%20conditions%20are%20great%20for%20the%20location%20you%20selected%3A%5Cn%20%5Cnhttp%3A//www.ignore.org/apps/jd3/daylight%23date%3D1392996643000%26lat%3D51.73171%26long%3D5.527827000000002%5Cn%5CnHappy%20shooting%2C%20and%20be%20sure%20to%20share%20your%20wildlife%20photos%20back%20to%20http%3A//www.jungledragon.com%5CnCheers%2C%5CnThe%20JungleDragon%20Team%0AEND%3AVEVENT%0AEND%3AVCALENDAR 

接下來,新標籤是空白的,沒有任何反應。我不確定我的.ics中是否有語法錯誤,但鑑於它適用於Chrome和Firefox,我不這麼認爲。

有什麼想法?

編輯,額外信息:如果我手動打開一個具有完全相同內容的下載.ics文件,它也可以在IE和Opera中使用。用window.open打開它的方式肯定有問題嗎?

回答

6

回答我的問題:

的問題並沒有在輸出.ICS本身,而是它在IE和Opera不處理JS生成的輸出要下載的文件。要強制執行這樣的下載,只能從服務器端腳本執行。

我結束了我重新編碼邏輯的。集成電路上的服務器端文件的輸出,並通過執行這些標題:

header('Content-type: text/calendar; charset=utf-8'); 
header('Content-Disposition: attachment; filename=cal.ics'); 

這是一個痛苦的轉型,但現在它可以跨瀏覽器。

+0

出色的工作。我被困在IE瀏覽器中,直到我找到它。 – Krafty

相關問題