私は現在、Web アプリケーションに HTML5 オフライン サポートを追加する作業を行っており、ほとんど mgwt と同じアプローチに従っています。
- 計算時に順列ごとにマニフェスト ファイルを生成する
- ブラウザのユーザー エージェントに基づいて、サーブレットを使用してマニフェスト ファイルを提供します。
私の質問にはステップ 2 が含まれます: 私のサーブレットでは、特定の要求に対してどの順列を提供するかを検出したいと考えています。私が今これを行う方法は次のとおりです。
- リクエストからユーザー エージェント文字列を取得する
これを (単純な文字列操作 (例:
userAgent.contains("safari")
) を使用して) 'agent id' にマップします。これは、マッピング ファイルを使用して順列の厳密な名前にマップできます。つまり、マップできるMozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)
にie6
マップします (生成されたマッピング ファイルを使用して、を参照してください)。以下例)へ15B454D690F2CCAD57F1DD809429BF42
。<permutation name="15B454D690F2CCAD57F1DD809429BF42"> <user.agent>ie6</user.agent> </permutation>
私が直面している問題: GWT が使用するのと同じ方法で、ユーザー エージェント文字列を順列にリンクする方法を使用したい (つまり、 にマップMozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)
するie6
)。この方法では、GWT が他の順列/ブラウザー バージョンで更新されるたびにコードを修正する必要がありません。言い換えれば、サーブレット内の完全なユーザー エージェント文字列を順列マッピングのユーザー エージェント「id」(私の例では「ie6」) と単純に一致させるという現在のソリューションが気に入らないということです。私が考えた解決策は次のとおりです。
- ページの読み込み後、読み込まれた順列を検出し、それを引数としてサーブレットに渡します。次に、その順列のマニフェストをフェッチした後、javascript を使用して html タグの属性として挿入します。ただし、これを動的に挿入すると正しく動作しないようです。(動的に HTML5 キャッシュ マニフェスト ファイルをトリガーするを参照してください。
- どういうわけか、クライアント側を使用して、サーブレットで完全なユーザー エージェント文字列を順列にマップします。私はこの解決策を好みますが、これを達成する方法を見つけていません... GWT はこれを達成するために javascript を使用します ( UserAgentPropertyGeneratorを参照)。これをサーブレットで実行することもできますが、この JavaScript メソッドはユーザー エージェントを使用するだけでなく、dom ドキュメントも使用します...見落としている他の解決策はありますか? HTML5マニフェストファイルを作成するときに、確かに他の人もこの問題を抱えていたに違いありません...