0.経緯
元々IE11用に作成されていたJava製のWebシステムで
Edge、Chromeへの対応をやってる際、
他のシステムでも対応しないとならなさそうな
問題が色々出て来たのでメモ。
今後更に増えるかも?
1.日本語名ファイルのダウンロード文字化け対応
IE11、Edgeでは問題無かった日本語ファイル名のダウンロードが
Chromeでは文字化け。
サーバー側で該当部分のコードを調べてみると…
String fileName = new String(value.getBytes("Windows-31J") , "8859_1" );
response.setHeader("Content-Disposition", "attachment;filename=¥"" + fileName +"¥"" );
この通り、Windows-31J(Shift-JIS)でのエンコード。
Chromeがダメなわけです。
幸運にも今回の案件ではIEの下位互換は考えなくて良かったので
RFC 6266 にならって以下の通り修正。
String fileName = URLEncoder.encode(value, "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName);
これにてChromeでの文字化けが解消。
Edge、IE11でも文字化けは起こらず、一件落着。
2.コード項目のハイパーリンク化対応
業務系のシステムだとありがちな
文字列数字n桁のコードの画面表示。
IE11ではごく普通のラベルとして表示されていたのに、
Edgeで確認すると謎のハイパーリンク化。
一体何だろうと調べてみるとこんなオチでした。
https://msdn.microsoft.com/ja-jp/library/dn265018%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
IE11の話として書いてるけど、IE11では発生せず…
むしろEdgeでの話として捉えた方が良さそうです。
というわけで、画面のjspのheadタグ内に以下の一行を追加。
<meta name="format-detection" content="telephone=no"/>
これにて、謎のハイパーリンク化現象は解消。