IE7Pro でサーバー側のテストをするのは辞めよう。
FireBug Lite++ などの関係でIE7Proにしていたんだけれど。なんか respond_to がおかしいと思って、Controller で次のようにSTDOUTに出してみる
puts "=---------------------------" puts "request.format" puts request.format puts "=---------------------------"
驚愕の自体に?
Firefox の場合。
=--------------------------- request.format text/html =---------------------------
IE7 の場合(厳密にはIE7Proをインストールした後でアドオンなしで起動したもの)。
=--------------------------- request.format */* =---------------------------
ふむ。
IE7Pro の場合。
=--------------------------- request.format image/gif =---------------------------
ちょww いやいや、おいおいw 何をもってimage/gifをよこせとw さすがにウケルよ、これ。IE 6 は手元にない(Snapshot 取り忘れたorz)ので、確認のしようがない。
ってことは、そもそも、respond_to do |format| ...; end って役に立たないメソッドなんじゃ?と思って試してみた。
class CtrlController < ApplicationController def index respond_to do |format| format.html { render :text => "HTML!!" } format.xml { render :text => "XML!" } format.gif { render :text => "GIF!" } end end end
config/initializer/mime_types.rb に以下を追加。
Mime::Type.register "image/gif", :gif
IE7Pro でアクセス。
GIFだよ!やっぱり。と思ってうっかりF5を押したら、
あれ、今度はHTML??もういっちょF5するとGIFになりました。なんかどうもIE7Proはよろしくないようですね。これじゃ、IE7Proでテストするわけにはいきません。
ちなみに、request.format の問題はどうにもなりません。Fアドレスバーへの入力に対して、
の様に見えます(詳細はHTTPのダンプとらないとわからん)。ブラウザに依存する部分なので、あまりロジックに含めない方がいいですね。
無理矢理対応するなら、リクエストが ?format=gif とかなるように、リンクを張ってあげるとAcceptフィールドよりも優先されるので、多少格好が悪くても、こっちでいいかもしれません。{id}.gif のように拡張子でもおk。