2011-12-13 17 views
16

Qualcuno può dirmi se c'è qualche plugin per jQuery per creare dinamicamente .ics con i valori provenienti dai valori pagina div come ci sarebbecrea il file .ics al volo usando javascript o jquery?

<div class="start-time">9:30am</div> 
<div class="end-time">10:30am</div> 
<div class="Location">California</div> 

o JavaScript modo per creare dinamicamente file delle .ics? Fondamentalmente ho bisogno di creare il file .ics e tirare questi valori usando javascript o jquery? e collega il file ics creato al collegamento "AGGIUNTA AL CALENDARIO" in modo che venga aggiunto a Outlook?

risposta

1

Questa è una vecchia domanda, ma ho alcune idee che potrebbero farti iniziare (o chiunque altro abbia bisogno di fare un compito simile).

E il JavaScript per creare il contenuto del file, e aprire il file:

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

Presumibilmente che ci si vuole aggiungere che il codice per l'evento onclick di un pulsante modulo.

Non ho Outlook a portata di mano, quindi non sono sicuro se riconoscerà automaticamente il tipo di file, ma potrebbe.

Spero che questo aiuti.

28

sarà necessario renderlo in formato ICS. inoltre dovrai convertire la data e il fuso orario; PER ESEMPIO. 20120315T170000Z o YYYYMMDDThhmmssZ

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)); 
    }); 

l'esempio precedente creerà un file ICS per il download. l'utente dovrà aprirlo e sbloccare, iCal, o il calendario di Google farà il resto.

+1

FYI a chiunque cerchi: a partire da 8/8/13 questo codice non funziona. Il file .ics viene scaricato e aperto ma iCal dice che non può leggere il file e gli errori:/ NOTA: Se rimuovi gli spazi intorno a "\ n BEGIN: VEVENT \ n" funziona, ma SO non lascerà modifica niente sotto i 6 caratteri :( –

+0

Questo ha funzionato in modo fantastico per me proprio ora! – Reuben

+0

Quindi funziona nel browser Web su iOS ma non quando è inserito in PhoneGap.qualche idea su come farlo funzionare? Per quelli che vorrebbero questo in una domanda separata, qui: http://stackoverflow.com/questions/18166561/allowing-ics-to-open-in-phonegap-app-for-ios?noredirect=1#comment26614023_18166561 – Reuben

0

Questo approccio ha funzionato bene tuttavia con IE8 il browser non è riuscito a riconoscere il tipo di file e si è rifiutato di aprire come elemento del calendario. Per aggirare questo ho dovuto creare il codice sul lato server (ed esposto tramite il servizio RESTful) e quindi impostare le intestazioni di risposta come segue;

@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(); 
} 

Questo può essere servita da window.location invitando l'URL del servizio e funziona su Chrome, Firefox e IE8.

Spero che questo aiuti.

1

Da quello che ho trovato online e su questo sito, non è possibile farlo funzionare in IE in quanto è necessario includere determinate intestazioni per consentire a IE di scaricare questo file.

Il metodo window.open funziona con Chrome e Firefox, ma non con IE, quindi potrebbe essere necessario ristrutturare il codice per utilizzare un linguaggio sul lato server per generare e scaricare il file ICS.

altro si possono trovare in questo question

0

Mentre questo è una domanda più vecchio, ho cercato una soluzione front-end pure. Di recente mi sono imbattuto nello ICS.js library che sembra la risposta che stai cercando.

Problemi correlati