Как создать рабочий файл .ics с сайта stati c? - PullRequest
0 голосов
/ 25 января 2020

Я хочу создать веб-сайт stati c html с функцией загрузки записей календаря, он должен работать в новых браузерах (нет необходимости в IE).

Сначала я попробовал это js lib для создания .ics файла: https://github.com/nwcell/ics.js - я не смог заставить его работать ...
Затем я попробовал настроенный форк, который я получил, чтобы создать и загрузить файл с: https://github.com/matthiasanderer/icsFormatter

Я тестирую его на Windows 10, и он успешно открылся в MS Outlook, но потом я заметил, что файл не открылся в Windows календарь приложение:
Ошибка переводит что-то вроде: "The event couldn't be opened. Perhaps the calendar file is damaged."
Windows Calendar App Error Message


В Safari на iPhone также возникает ошибка при нажатии на кнопку загрузки:
Ошибка переводит что-то вроде: "Safari can not load this file."
Safari error message


Я проверил сгенерированный файл .ics с этим инструмент: http://ical-validator.herokuapp.com/validate/, скорректировал код JS, чтобы устранить почти все ошибки - и я не знаю, если это последняя ошибка, от которой я не знаю, как избавиться, важно:

Specifying the charset in the MIME Content-Type is mandatory

Validation Error
Я думал, что тип MIME не должен быть проблемой, потому что он определен в функции JS -download в этом строка:

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

Мне также интересно, почему загрузка работает нормально в Chrome, но Firefox (V.72) загружает файл с двойным окончанием файла в конце: .ics.ics
Double file ending


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


Это содержимое моего сгенерированного. ics file:

BEGIN:VCALENDAR
PRODID:-//test//cal_events/NONSGML v1.0//DE
VERSION:2.0
BEGIN:VEVENT
UID:b1e4da94-1550-453f-bdee-a085a0b14231
CLASS:PUBLIC
DESCRIPTION:This is the description...
DTSTAMP:20200125T084646Z
DTSTART:20200229T190000z
DTEND:20200229T230000z
LOCATION:Deutschland
SUMMARY:Event Title
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR

Похоже этот вопрос похож ...

1 Ответ

1 голос
/ 27 января 2020

Как DTSTART, так и DTEND имеют прописную букву z вместо суффикса Z

DTSTART:20200229T190000z
DTEND:20200229T230000z

См. https://tools.ietf.org/html/rfc5545#section -3.3.5

Дата с UT C временем или абсолютным временем определяется с помощью суффикса LATIN CAPITAL LETTER Z, обозначения UT C, добавляемого к значению времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...