Создать файл .ics с javascript или jquery

Я пытаюсь создать файл .ics, когда пользователь нажимает кнопку.

Пока что у меня есть код

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:[email protected]\nDTSTAMP:20120315T170000Z\nATTENDEE;CN=My Self ;RSVP=TRUE:MAILTO:[email protected]\nORGANIZER;CN=Me:MAILTO::[email protected]\nDTSTART:" + msgData1 +"\nDTEND:" + msgData2 +"\nLOCATION:" + msgData3 + "\nSUMMARY:Our Meeting Office\nEND:VEVENT\nEND:VCALENDAR";

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

Загружает файл .ics, но когда я пытаюсь открыть его в iCal, мне говорят, что он не может прочитать файл.

Ответ 1

Для этого есть проект с открытым исходным кодом:

Это 100% JavaScript и работал во всех современных браузерах, кроме IE 9 и ниже.

Если вам интересно, как они работают с файлами, вы можете проверить их источник. Для выполнения тяжелой работы они используют следующие библиотеки:

Ответ 2

Я использовал ics.js решение, упомянутое InsanelyADHD.

Одна из проблем с решением заключалась в том, что Chrome не обнаружил тип файла правильно и попытался открыть файл в виде текста с помощью редактора.

Я изменил функцию загрузки, чтобы открыть текст, просто:

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

Мой вилок на Github icsFormatter.js

Что касается лицензии: я связался с автором, чтобы включить GPL - после этого я тоже включу его.

Ответ 3

У вас есть два двоеточия для адреса организатора: "MAILTO:: [email protected]"

Если это не решит проблему, вам нужно будет показать нам полный поток, так как он получен iCal.

Наконец, и если предположить, что start_time и end_time используют правильный формат, для поля местоположения вам может понадобиться обернуть строки (http://tools.ietf.org/html/rfc5545#section-3.1) и уберите некоторые символы (http://tools.ietf.org/html/rfc5545#section-3.3.11). Другими словами, вы можете посмотреть библиотеки iCalendar.

Ответ 4

Я использовал icsFormatter, о котором упоминалось, и smartbart24. Но я должен был поддерживать IE до версии 7, поэтому мне пришлось немного подстроить элементы.

Чтобы использовать icsGen, моя вилка icsFormatter, у вас должен быть установлен php 4 или 5 на вашем веб-сервере.