年明けから関わってるPJは、そこそこ規模があるWebシステムで、そのバグ対応を実施していた時に当たった問題。
(前提)システムのバックエンドはJSFだった。
- 【問題点1】Edgeブラウザで、ダウンロードしたファイル名が正しくない(_UTF-8~~~)みたいになる
- 【解決方針】ブラウザ判定を修正して、ファイル名エンコードをIEに合わせる
Windows10の、標準ブラウザになったMicrosoftEdge。
こいつからダウンロードするファイルの名前が不正になる。というありがち(だと思う)な問題。
EdgeのUserAgentは、後発なだけあって他の色んなブラウザの名称も含ませて持っている様子。
下記リンクを参考にさせていただいた。
http://qiita.com/tonkotsuboy_com/items/7b36bdfc3a9a0970d23b
ファイル名のエンコード仕様は、今回のシステムのソースを見ると、IE系とWebKit系で大きく2つに分けてあって、
1) IE系(IE、IE11(trident/7)、Safariなど)→生文字
2) WebKit系(Chrome、Firefoxなど)→base64でエンコード
こうなっていた。
ロジック的に、UserAgentのChrome判定が上位にあったため、
EdgeはWebKit系の分岐に入っていたがIE系に入る必要があるので、それを直して終了。
- 【問題点2】Edgeブラウザで、PDFファイルがインライン表示できない
- 【解決方針】インライン表示ではなく、ファイルダウンロードさせる
システムから出力するPDFファイルを別ウィンドウ開いてインライン表示するリンクをクリックしても、
白いblankページが開くだけでうまく動かない。というバグ。
なぜインライン表示に失敗するのか、真の原因追及をしたかったのだけど、ユーザと対応方針は決まっていたので
それに従い、ダウンロードさせる方向で改修を進めた。
ヘッダに付ける"Content-Disposition"を「inline(インライン表示)→attachment(添付ファイル)」に変更するだけで良かったのだけど、
作業時点では知らなかったので、"Content-Type"を「application/pdf→application/force-download」にしてみた。
これで解決。