2

私たちのサーバーには、イベントの動的な iCalendar フィードを取得する手段が実装されています。これは、最初に iCalendar ファイルをレンダリングする Coldfusion スクリプトを呼び出すことによって処理され、「text/calendar; charset=UTF-8」のコンテンツ タイプを設定した後に返されます。呼び出されるのは次のようなものです。http://www.mysite.com/ical.cfm?calendar_id=1

ただし、これによりモバイル デバイスなどの間で問題が発生することがわかりました。iPad はこれに「サブスクライブ」せず、イベントをインポートします。これらを更新したいので、これは良くありません。他のブラウザーは単に ICS ファイルをダウンロードするように促すだけであり、これは再び単一のファイルをインポートすることになり、イベントを実際に「サブスクライブ」することはありません (代わりに「.ics」に固定されたファイル名を取得するために Content-Disposition ヘッダーをいじってみました) 「.cfm」としてダウンロードする)。

次に、リンクで「http://」の代わりに「webcal://」を使用してみました。これで iPad の問題は解決したようで、Firefox はリンクを別のアプリケーションで開くように求めてきました (誰かが自分のカレンダー アプリを選択できると思います)。ただし、Chrome は何もしません。リンクをクリックしても何も起こりません。Webcal は標準の「プロトコル」ではないため、問題が発生する可能性があります。

ここで、Wireshark を開いて、Google iCalendar ファイル (任意のブラウザーと iPad で問題なくリンクする) を配信するパケットを検査しましたが、いくつかのキャッシュ ヘッダーとカスタム "X" ヘッダーを除いて、特別なことは何もありませんでした。注意すべき点は、コンテンツ タイプがまさに私たちが提供しているものに設定されていることです。

だから、これをすべてのブラウザとiPad / iPhoneで同じように動作させるためのヒントがあるかどうか疑問に思っています. リンクが ".ics" ではなく ".cfm" を呼び出しているという事実が、何か問題を引き起こしているのでしょうか? もしそうなら、これを解決するために書き換えルールを実装できると思います...

4

1 に答える 1

2

これをさらに実験した後、これを複数のプラットフォームで確実に機能させる方法があるかどうかはよくわかりません. iPhone や iPad などの場合、Apple のカレンダー アプリを介して購読するには、「webcal://」リンクが必要なようです。一部のブラウザはこの形式に問題がありませんが、そうでないブラウザもあります。

これには、ユーザーが自分のデバイスに適したダウンロードを選択できるようにするインターフェイスを作成するか、サーバー側のリクエストから User-Agent を使用して、特定のデバイス/ブラウザーに適した形式でリンクをターゲットにする必要があります。

于 2012-11-02T14:51:09.027 に答える