Странное поведение на сафари в Iphone при открытии специально созданного файла .ics

Я создаю собственный файл .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));
  });

Вы пробовали использовать сторонний инструмент для создания файла .ics и сравнить, совпадает ли он с тем, который у вас есть? apps.marudot.com/ical

Terry 02.05.2018 10:37

Вам нужен escape()?

deEr. 02.05.2018 10:42

Обновление: я тестировал ваш код в JSFiddle, jsfiddle.net/qbnkd473/2 и тестировал полностью до iOS7 Safari на BrowserStack, и он все еще работает. Однако я вижу, что в вашей строке ICS отсутствует завершающий END:VCALENDAR в самом конце. Решит ли это вашу проблему, если вы ее добавите?

Terry 02.05.2018 10:58

@Terry Это именно то, что я сделал. Я копирую вставленное содержимое файла .ics в свой js. Я пытаюсь добавить то, что вы сказали, но это все равно не работает. Хотя, после многократного тестирования, он иногда работает отлично, а иногда ведет себя так же, как на видео, которое я отправляю. Когда я использую упомянутый вами веб-сайт и загружаю оттуда файл ics, он всегда работает, поэтому я действительно не уверен, что мне здесь не хватает

user3691791 02.05.2018 11:16

@ Попробуйте такое же поведение на отправляемой вами скрипке. см .: vimeo.com/267556152 Странно то, что когда я загружаю файл с apps.marudot.com/ical, он не просит меня разрешить приглашение календаря.

user3691791 02.05.2018 11:30

Удалось ли вам решить эту проблему? Мы можем наблюдать такое же поведение в наших сгенерированных файлах ics. Иногда это работает, иногда нет.

Alig 14.09.2018 09:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
6
949
1

Ответы 1

Я использую библиотеку: Ежедневник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()));
    

icalendar.render () генерирует файл .ics и выглядит так: ics string

Другие вопросы по теме