2014.
12.
01
22:27:40
結論から書くと、Content-Typeの解釈が変わった?っぽいですね。
あるいはobjectタグのtype属性を見なくなったのかな(--?
とにかく、今まで
で出力していたのを、きちんと
と指定するようにしたら、インライン表示されました。
う~む、よく分からん。
気を取り直して、詳細を書いていきます。
とあるHTMLファイルの中にこんな記述がありましてねφ(--)
呼び出している「output_pdf.php」の中身は、こんなんでしたφ(--)
処理はサーバ上のPDFファイル「hoge.pdf」を読み込んで、返しているだけです。
以前はこれで、objectタグを指定した画面上に「hoge.pdf」の中身が表示されていました。
ところがどっこい、ある時ふと気づいたら、勝手にダウンロードされるようになっていたのです。
あれ(--?
なんで(--?
「勝手に」の部分は設定を変えれば「保存しますか?」とか訊いてくるようにできるけど、
そもそもダウンロードじゃなくてインライン表示しろや!(;゚д゚)
ぷりぷりしながら試行錯誤した結果、Content-Typeの指定を
から
に変えたら無事にインライン表示されるようになりました。
PHPのコードで書くと、こんな感じですφ(--)
昔のChromeさんは、気を利かせてファイルの種類を自己判断していたのでしょうか(--?
「application/octet-stream」(なんかのバイナリファイルだよ)を指定しても
拡張子あたりから「あぁ、PDFファイルか」と判断して、インライン表示してくれていたっぽいです。
実際のところは分かりませんが、事実、昔のChromeではインライン表示されていたので
そうなのでしょう。
それが変わったのかな(--?
うん。
挙動としたら今の方が正しいでしょうね。
……むしろ、なんで今までインライン表示されていたのよ?(--;
いろいろと腑に落ちない部分はありますが、気にしないことにします。
取りあえず、今までインライン表示していたPDFとかが
何も変更していないのに勝手にダウンロードされるようになった場合は、
Content-Typeの指定を疑ってみても良いと思いますよ。
そんな感じ\(--)/
あるいはobjectタグのtype属性を見なくなったのかな(--?
とにかく、今まで
Content-Type: application/octet-stream
で出力していたのを、きちんと
Content-Type: application/pdf
と指定するようにしたら、インライン表示されました。
う~む、よく分からん。
気を取り直して、詳細を書いていきます。
とあるHTMLファイルの中にこんな記述がありましてねφ(--)
<object data="output_pdf.php" type="application/pdf">
呼び出している「output_pdf.php」の中身は、こんなんでしたφ(--)
<php
header('Content-Type: application/octet-stream');
header('Content-Disposition: inline; filename="hoge.pdf"');
readfile("/hoge_dir/hoge.pdf");
header('Content-Type: application/octet-stream');
header('Content-Disposition: inline; filename="hoge.pdf"');
readfile("/hoge_dir/hoge.pdf");
処理はサーバ上のPDFファイル「hoge.pdf」を読み込んで、返しているだけです。
以前はこれで、objectタグを指定した画面上に「hoge.pdf」の中身が表示されていました。
ところがどっこい、ある時ふと気づいたら、勝手にダウンロードされるようになっていたのです。
あれ(--?
なんで(--?
「勝手に」の部分は設定を変えれば「保存しますか?」とか訊いてくるようにできるけど、
そもそもダウンロードじゃなくてインライン表示しろや!(;゚д゚)
ぷりぷりしながら試行錯誤した結果、Content-Typeの指定を
application/octet-stream
から
application/pdf
に変えたら無事にインライン表示されるようになりました。
PHPのコードで書くと、こんな感じですφ(--)
<php
//header('Content-Type: application/octet-stream');
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="hoge.pdf"');
readfile("/hoge_dir/hoge.pdf");
//header('Content-Type: application/octet-stream');
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="hoge.pdf"');
readfile("/hoge_dir/hoge.pdf");
昔のChromeさんは、気を利かせてファイルの種類を自己判断していたのでしょうか(--?
「application/octet-stream」(なんかのバイナリファイルだよ)を指定しても
拡張子あたりから「あぁ、PDFファイルか」と判断して、インライン表示してくれていたっぽいです。
実際のところは分かりませんが、事実、昔のChromeではインライン表示されていたので
そうなのでしょう。
それが変わったのかな(--?
うん。
挙動としたら今の方が正しいでしょうね。
……むしろ、なんで今までインライン表示されていたのよ?(--;
いろいろと腑に落ちない部分はありますが、気にしないことにします。
取りあえず、今までインライン表示していたPDFとかが
何も変更していないのに勝手にダウンロードされるようになった場合は、
Content-Typeの指定を疑ってみても良いと思いますよ。
そんな感じ\(--)/
category:● その他