Я создаю собственный файл .ics с помощью javascript. когда я пытаюсь открыть его на своем рабочем столе, он работает хорошо, но когда я открываю его с помощью сафари на своем Iphone, он ведет себя странно: открывается новый экран для добавления события в календарь, но он сразу закрывается. Смотрите видео: https://vimeo.com/267547030
Это код:
HTML:
<a id = "test">Demo</a>
JS:
var icsMSG = "BEGIN:VCALENDAR\n" +
"VERSION:2.0\n" +
"PRODID:-//www.marudot.com//iCal Event Maker\n" +
"CALSCALE:GREGORIAN\n" +
"BEGIN:VTIMEZONE\n" +
"TZID:Asia/Damascus\n" +
"TZURL:http://tzurl.org/zoneinfo-outlook/Asia/Damascus\n" +
"X-LIC-LOCATION:Asia/Damascus\n" +
"BEGIN:STANDARD\n" +
"TZOFFSETFROM:+0300\n" +
"TZOFFSETTO:+0200\n" +
"TZNAME:EET\n" +
"DTSTART:19701030T000000\n" +
"RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\n" +
"END:STANDARD\n" +
"BEGIN:DAYLIGHT\n" +
"TZOFFSETFROM:+0200\n" +
"TZOFFSETTO:+0300\n" +
"TZNAME:EEST\n" +
"DTSTART:19700327T000000\n" +
"RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\n" +
"END:DAYLIGHT\n" +
"END:VTIMEZONE\n" +
"BEGIN:VEVENT\n" +
"DTSTAMP:20180502T071600Z\n" +
"UID:[email protected]\n" +
"DTSTART;TZID=\"Asia/Damascus\":20180509T120000\n" +
"DTEND;TZID=\"Asia/Damascus\":20180510T120000\n" +
"SUMMARY:scaxczads\n" +
"END:VEVENT";
$('#test').click(function () {
window.open( "data:text/calendar;charset=utf8," + escape(icsMSG));
});
Вам нужен escape()
?
Обновление: я тестировал ваш код в JSFiddle, jsfiddle.net/qbnkd473/2 и тестировал полностью до iOS7 Safari на BrowserStack, и он все еще работает. Однако я вижу, что в вашей строке ICS отсутствует завершающий END:VCALENDAR
в самом конце. Решит ли это вашу проблему, если вы ее добавите?
@Terry Это именно то, что я сделал. Я копирую вставленное содержимое файла .ics в свой js. Я пытаюсь добавить то, что вы сказали, но это все равно не работает. Хотя, после многократного тестирования, он иногда работает отлично, а иногда ведет себя так же, как на видео, которое я отправляю. Когда я использую упомянутый вами веб-сайт и загружаю оттуда файл ics, он всегда работает, поэтому я действительно не уверен, что мне здесь не хватает
@ Попробуйте такое же поведение на отправляемой вами скрипке. см .: vimeo.com/267556152 Странно то, что когда я загружаю файл с apps.marudot.com/ical, он не просит меня разрешить приглашение календаря.
Удалось ли вам решить эту проблему? Мы можем наблюдать такое же поведение в наших сгенерированных файлах ics. Иногда это работает, иногда нет.
Я использую библиотеку: Ежедневник1: https://www.npmjs.com/package/datebookfor генерирует файлы .ics из пользовательских данных. Также поддерживает Календарь Google, Календарь Yahoo, Календарь Outlook.
побег() теперь устарел, вместо него следует использовать encodeURI ().
Сценарий iCal:
Для браузера больших устройств я загружаю файл .ics, который я использую:
const icalendar = new ICalendar(this.config);
icalendar.download();
Будет загружен файл .ics, и когда вы откроете его, вы сможете добавить его в календарь по умолчанию.
Для мобильных устройств я использую браузер
const icalendar = new ICalendar(this.config);
window.open('data:text/calendar;charset=utf8,' + encodeURI(icalendar.render()));
Вы пробовали использовать сторонний инструмент для создания файла .ics и сравнить, совпадает ли он с тем, который у вас есть? apps.marudot.com/ical