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アドレスバーへの入力に対して、

  • Firefox の場合は text/html
  • IE 7 の場合は */*

の様に見えます(詳細はHTTPのダンプとらないとわからん)。ブラウザに依存する部分なので、あまりロジックに含めない方がいいですね。

無理矢理対応するなら、リクエストが ?format=gif とかなるように、リンクを張ってあげるとAcceptフィールドよりも優先されるので、多少格好が悪くても、こっちでいいかもしれません。{id}.gif のように拡張子でもおk。