https://stackoverflow.com/a/4551467/90236で説明されているように、モバイル デバイスで data:Uri を使用して ical を使用してカレンダー エントリを作成しようとしています。これを Chrome で実行し、カレンダー アプリが MS Outlook の場合、デスクトップ マシンでうまく動作します。
基本的に、私がJavascriptで行うことは次のとおりです。
var icalsample = "BEGIN:VCALENDAR\r\n\
VERSION:2.0\r\n\
PRODID:-\/\/mycompany.com\/myproduct\/\/NONSGML v1.0\/\/EN\r\n\
BEGIN:VEVENT\r\n\
UID:" + uuid + "@mycompany.com\r\n\
DTSTAMP:" + dtstamp.toISOString() + "\r\n\
ORGANIZER;CN=mycompany scheduler\r\n\
DTSTART:" + dtstart.toISOString() + "\r\n\
DTEND:" + dtend.toISOString() + "\r\n\
SUMMARY:" + title + "\r\n\
DESCRIPTION:" + description + "\r\n\
END:VEVENT\r\n\
END:VCALENDAR\r\n";
var uriContent = "data:text/calendar," + encodeURIComponent(icalsample);
location.href = uriContent;
私のアプリの uriContent の例を以下に示します。それをコピーして Chrome のアドレス バーに貼り付けると、期待どおりに動作します。
data:text/calendar,BEGIN%3AVCALENDAR%0AVERSION%3A2.0%0APRODID%3A-%2F%2Fmycompany.com%2Fmyproduct%2F%2FNONSGML%20v1.0%2F%2FEN%0ABEGIN%3AVEVENT%0AUID%3A3e40a5db-bfe3-4ab5-92c0-22cb7aeaa2d4%40mycompany.com%0ADTSTAMP%3A2013-03-15T18%3A17%3A55.792Z%0AORGANIZER%3BCN%3Dmycompany%20scheduler%0ADTSTART%3A2013-03-18T16%3A00%3A00.000Z%0ADTEND%3A2013-03-18T20%3A00%3A00.000Z%0ASUMMARY%3AService%20Appointment%0ADESCRIPTION%3Aupgrade.%0AEND%3AVEVENT%0AEND%3AVCALENDAR
私の問題は、iPhone または Android では動作しないことです。私が読んだことから、 data:Uris がサポートされていると思いました。
Android 4.1.1 でデフォルト ブラウザ (Chrome ではない) を使用すると、文字列のテキストがプレーン テキスト ドキュメントのようにブラウザに表示されます。iPhone では、「ダウンロードに失敗しました: Safari はこのファイルをダウンロードできません」と表示されます。
iPhone と Android でこれを機能させるにはどうすればよいですか?
アップデート - -
上記の元のコードにはいくつかのエラーがあります。すべての行は \r\n で終わる必要があります。\n しかありませんでした。最後の行にも \r\n が必要です。javascript の Date.toISOString 形式は、iCal では無効です。ダッシュ、セミコロン、および秒の端数を削除する必要があります。これらのエラーをキャッチするための非常に価値のあるツールは、ical バリデーターです。
最も重要なことは、Android が iCal または ics ファイルをサポートしていないと思うことです。このギャップを埋めるために、これとサードパーティのツールについて議論しているフォーラムの投稿がたくさんあります。したがって、私のコードは正しかったと思います (上記の更新プログラムのバグは別として) が、アプリまたはインテントが text/calendar MIME タイプに登録されていないため、電話で失敗しました。