开发者

What's the easiest way to detect the user's operating system in Rails 3?

Simple Rails app, mostly scaffolding. I want to detect whether the user is using Android or iPhone to ac开发者_开发知识库cess my app. What's the easiest way to do that?


if request.env['HTTP_USER_AGENT'].downcase.match(/android|iphone/)
  puts "yup, its mobile"
end


I know this question is old, but in case this helps someone else, I use this method in application_controller.rb to automatically set the format to :mobile:

before_filter :detect_mobile

protected

def detect_mobile
  request.format = :mobile if mobile?
end

def mobile?
  request.user_agent =~ /iPhone|iPad|Android/i
end

The mobile? method is separate so that you can also use it in your own controllers if you need to do some sort of conditional logic for mobile browsers.


  def getBrowser(bt)
    rs=false
    ua=request.env['HTTP_USER_AGENT'].downcase
    isOpera = ua.index('opera') ? true : false
    isSafari = (ua =~ /webkit|khtml/) ? true : false
    isSafari3 = (ua.index('webkit/5') ? true : false
    isGecko = (!isSafari and ua.index('gecko')) ? true : false
    isGecko3 = (!isSafari and ua.index('rv:1.9')) ? true : false
    isIE = (!isOpera and ua.index('msie')) ? true : false
    isIE7 = (!isOpera and ua.index('msie 7')) ? true : false
    case bt
      when 0  #isKonqueror
        if ua.index('konqueror') then rs=true end
      when 1  #isOpera
        rs=isOpera
      when 2  #isSafari
        rs=isSafari
      when 3  #isSafari2
        rs=isSafari && !isSafari3
      when 4  #isSafari3
        rs=isSafari3
      when 5  #isIE
        rs=isIE
      when 6  #isIE6
        rs=isIE && !isIE7
      when 7  #isIE7
        rs=isIE7
      when 8  #isGecko
        rs=isGecko
      when 9  #isGecko2
        rs=isGecko && !isGecko3
      when 10 #isGecko3
        rs=isGecko3
      when 11 #isWindows
        if ua.index('windows') or ua.index('win32') then rs=true end
      when 12 #isMac
        if ua.index('macintosh') or ua.index('mac os x') then rs=true
end
      when 13 #isAir
        if ua.index('adobeair') then rs=true end
      when 14 #isLinux
        if ua.index('linux') then rs=true end
      when 15 #isSecure
        s = request.env['SERVER_PROTOCOL'].downcase
        if s.index('https') then rs=true end
    end
    rs
  end 

http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/8fa57719fd9316e1


the user_agent gem is useful for mobile vs. desktop..., and browser version. but doesn't do anything for OS https://github.com/josh/useragent

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜