web-dev-qa-db-fra.com

Créer un fichier .ics avec javascript ou jquery

J'essaie de créer un .ics fichier lorsqu'un utilisateur clique sur un bouton.

Jusqu'à présent, le code que j'ai est

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

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

Cela télécharge un .ics fichier mais quand j'essaye d'ouvrir ceci dans iCal, on me dit qu'il ne peut pas lire le fichier.

15
joshuahornby10

J'ai utilisé la solution ics.js mentionnée par InsanelyADHD.

Un problème avec la solution était que Chrome n'a pas détecté correctement le type de fichier et a essayé d'ouvrir le fichier sous forme de texte avec l'éditeur.

J'ai changé la fonction de téléchargement pour ouvrir le texte simplement avec:

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

Ma fourchette sur Github est icsFormatter.js

Concernant la licence: j'ai contacté l'auteur d'origine pour inclure une GPL - après cela j'en inclurai une aussi.

14
smartbart24

Il existe un projet open source pour cela:

Il est 100% JavaScript et a fonctionné sur tous les navigateurs modernes à l'exception de IE 9 et ci-dessous).

Si vous souhaitez savoir comment ils font fonctionner les fichiers, vous pouvez vérifier leur source. Ils utilisent les bibliothèques suivantes pour effectuer le gros du travail:

7
InsanelyADHD

Vous avez deux points pour l'adresse de l'organisateur: "MAILTO :: [email protected]"

Si cela ne résout pas le problème, vous devrez nous montrer le flux ical complet, tel qu'il est reçu par iCal.

Enfin, et en supposant que start_time et end_time utilisent le format correct, pour le champ d'emplacement, vous devrez peut-être envelopper les lignes ( http://tools.ietf.org/html/rfc5545#section-3.1 ) et échapper certains caractères ( http://tools.ietf.org/html/rfc5545#section-3.3.11 ). En d'autres termes, vous voudrez peut-être regarder les bibliothèques iCalendar.

4
Arnaud Quillaud

ics.js n'a pas fonctionné pour moi car je chargeais les données de manière asynchrone depuis ma base de données. Je suis ensuite passé à ical.js combiné avec la fonction saveAs de ics.js et cela a fonctionné. Si quelqu'un ici a les mêmes problèmes, n'hésitez pas à m'envoyer un SMS, je vous fournirai un exemple

0
Andri

J'ai utilisé icsFormatter qui a été mentionné et par smartbart24. Mais je devais prendre en charge IE jusqu'à la version 7, j'ai donc dû modifier un peu les choses.

Pour utiliser icsGen , mon fork d'icsFormatter, vous devez avoir installé php 4 ou 5 sur votre serveur web.

0
RegisteredUser