好吧,我有一些作品了。感謝@danivovich在正確的位置開始我的工作。我必須做的第一件事就是理清MIME類型的mime_types.rb使HTML不是用XHTML別名:
module Mime
remove_const('HTML') # remove this so that we can re-register the types
end
Mime::Type.register "text/html", :html
Mime::Type.register "application/xhtml+xml", :xhtml
的我只是說這對我的應用程序控制器:
before_filter :negotiate_xhtml
after_filter :set_content_type
def negotiate_xhtml
@serving_polyglot = false
if params[:format].nil? or request.format == :html
@serving_polyglot = ((not request.accepts.include? :xhtml) or params[:format] == 'html')
request.format = :xhtml
end
end
def set_content_type
if @serving_polyglot
response.content_type = 'text/html'
end
end
這確保了XHTML總是被加密,除非客戶端不接受它,或HTML已被明確請求。 HTML始終只是XHTML的一個多邊形。 @serving_polyglot變量在需要任何切換的視圖中可用。
這是在Chrome瀏覽器,Safari瀏覽器,Firefox,Opera和IE瀏覽器[6-8]爲我工作。
感謝,這讓我在正確的軌道上,但Rails的別名「text/html的」用「是application/xhtml + XML」(爲什麼?),所以客戶端是否發送了XHTML在接受我有麻煩找出頭。它總是被刪除/替換到我的before_filter的時間。檢測客戶端是否接受application/xhtml + xml的最好/最乾淨的方法是什麼? – derkyjadex 2010-07-05 15:25:45
Fiddler2用於任何網絡流量,或Firebug for Firefox。 – danivovich 2010-07-06 01:34:49