Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: AJSwiftОтветов: 5

Может ли кто-нибудь сказать мне, есть ли какой-либо плагин 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?

javascriptoutlookaddicalendar

Ответы

Ответ 1 · рейтинг 31 · Defigo

вам нужно будет сделать это в формате 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 сделают все остальное.

Ответ 2 · рейтинг 1 · mwcz

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

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

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

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

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

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

Ответ 3 · рейтинг 1 · ChronixPsyc

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

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

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

Ответ 4 · рейтинг 1 · E Tarasewicz

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

Ответ 5 · cdugga

Этот подход работал нормально, однако в 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.

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы