создать файл .ics на лету, используя javascript или jquery?

Может ли кто-нибудь сказать мне, есть ли какой-либо плагин jquery для динамического создания файла .ics со значениями, исходящими из значений div страницы, как это было бы

<div class="start-time">9:30am</div>
<div class="end-time">10:30am</div>
<div class="Location">California</div>

или способ javascript для динамического создания файла .ics? Мне в основном нужно создать файл .ics и вытащить эти значения с помощью javascript или jquery? и связать созданный файл ics со ссылкой «ДОБАВИТЬ В КАЛЕНДАРЬ», чтобы он был добавлен в Outlook?


person AJSwift    schedule 13.12.2011    source источник


Ответы (5)


вам нужно будет сделать это в формате ICS. также вам нужно будет преобразовать дату и часовой пояс; НАПРИМЕР. 20120315T170000Z или ггггммддThhmmssZ

    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";

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

приведенный выше пример создаст файл ics для загрузки. пользователь должен будет открыть его, а Outlock, iCal или календарь Google сделают все остальное.

person Defigo    schedule 14.01.2013
comment
К сведению всех, кто ищет: по состоянию на 08.08.13 этот код не работает. Файл .ics загружается и открывается, но iCal говорит, что не может прочитать файл и выдает ошибки:/ ПРИМЕЧАНИЕ. Если вы удалите пробелы вокруг \n BEGIN:VEVENT \n, это сработает, но SO не позволит мне редактировать что-либо под 6 символов :( - person Brad Orego; 09.08.2013
comment
Так что это работает в веб-браузере на iOS, но не тогда, когда он обернут телефонным разрывом. Есть идеи, как заставить это работать? Для тех, кто хотел бы это в отдельном вопросе, здесь: stackoverflow.com/questions/18166561/ - person Reuben; 14.08.2013
comment
не будет работать в IE и Opera, см. этот вопрос - person Bernhard Riegler; 04.07.2017

Это старый вопрос, но у меня есть несколько идей, которые могли бы помочь вам начать (или любому другому, кому нужно выполнить аналогичную задачу).

И JavaScript для создания содержимого файла и открытия файла:

var filedata = $('.start-time, .end-time, .Location').text();
window.open( "data:text/calendar;charset=utf8," + escape( filedata ) );

Предположительно, вы захотите добавить этот код в событие onclick кнопки формы.

У меня нет под рукой Outlook, поэтому я не уверен, что он автоматически распознает тип файла, но может.

Надеюсь это поможет.

person mwcz    schedule 25.03.2012

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

Метод window.open работает для Chrome и Firefox, но не для IE, поэтому вам может потребоваться изменить структуру кода, чтобы использовать серверный язык для создания и загрузки файла ICS.

Больше можно найти в этом вопрос

person ChronixPsyc    schedule 31.07.2015

Хотя это старый вопрос, я также искал внешнее решение. Недавно я наткнулся на библиотеку ICS.js, которая выглядит как ответ, который вы ищете.

person E Tarasewicz    schedule 04.02.2016

Этот подход работал нормально, однако в IE8 браузер не мог распознать тип файла и отказывался открывать его как элемент календаря. Чтобы обойти это, мне пришлось создать код на стороне сервера (и выставить его через службу RESTful), а затем установить заголовки ответа следующим образом:

@GET
@Path("generateCalendar/{alias}/{start}/{end}")
@Produces({ "text/v-calendar" })
public Response generateCalendar(
        @QueryParam("alias") final String argAlias,
        @QueryParam("start") final String argStart,
        @QueryParam("end") final String argEnd) {
   ResponseBuilder builder = Response.ok();
   builder.header("content-disposition", "attachment;filename=calendar.ics");
   builder.entity("BEGIN:VCALENDAR\n<........insert meeting details here......>:VCALENDAR");
   return builder.build();
}

Это можно выполнить, вызвав window.location по URL-адресу службы, и работает в Chrome, Firefox и IE8.

Надеюсь это поможет.

person cdugga    schedule 03.07.2013