30

how can i detect browser type and its version in Rails. I want to put check on the version of specific browser and if its not required browser version than ask user to upgrade it.. i use below specified command but as its not following a standard pattern am unable to use it.

request.env['HTTP_USER_AGENT'] 

Chrome out put is below
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16
Safari out put is below
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1
FireFox out put is below
Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0
Opera out put is below
Opera/9.80 (Windows NT 5.1; U; en) Presto/2.8.131 Version/11.10
Internet Explorer out put is below
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)
Syed Raza
  • 1,070
  • 3
  • 14
  • 36
  • 1
    Sniffing the `'HTTP_USER_AGENT'` is the traditional way to do it. It is possible that other apps will spoof your code, or that a user will change their browser's signature to spoof you, so don't trust it explicitly. – the Tin Man Apr 26 '11 at 08:56

5 Answers5

30

Try the browser gem. Very simple and can solve your purpose.

You can find the gem Here very easy to use.

Nishutosh Sharma
  • 1,926
  • 2
  • 24
  • 39
29

NOTE: Be careful some search engines see this as a type of intrusion See ( Google HTTP USER AGENT )

 if request.env['HTTP_USER_AGENT'] =~ /[^\(]*[^\)]Chrome\//

or in the case of firefox

if request.env['HTTP_USER_AGENT'] =~ /[^\(]*[^\)]*[^\t]Firefox\//

and check this here you will get all you need browser Gem

browsers_detection_gem

and here is a method which can detect all browsers so chill man

def browser_detection
  result = request.env['HTTP_USER_AGENT']
  browser_compatible = ''
  if result =~ /Safari/
    unless result =~ /Chrome/
      version = result.split('Version/')[1].split(' ').first.split('.').first
      browser_compatible = 'Application is not functional for Safari version\'s '+version if version.to_i < 5
    else
      version = result.split('Chrome/')[1].split(' ').first.split('.').first
      browser_compatible = 'Application is not functional for Chrome version\'s '+version if version.to_i < 10
    end
  elsif result =~ /Firefox/
    version = result.split('Firefox/')[1].split('.').first
    browser_compatible = 'Application is not functional for Firefox version\'s '+version if version.to_i < 5
  elsif result =~ /Opera/
    version = result.split('Version/')[1].split('.').first
    browser_compatible = 'Application is not functional for Opera version\'s '+version if version.to_i < 11
  elsif result =~ /MSIE/
    version = result.split('MSIE')[1].split(' ').first
    browser_compatible = 'Application is not functional for Microsoft Internet Explorer version\'s '+version if version.to_i < 9
  end
  browser_compatible
end
Jonathan Bender
  • 1,911
  • 4
  • 22
  • 39
TH Afridi
  • 442
  • 6
  • 17
9

There is also useragent gem:

<% user_agent = UserAgent.parse(request.env["HTTP_USER_AGENT"]) %>
App: <%= user_agent.application %> # Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0)
Browser: <%= user_agent.browser %> # Firefox
Version: <%= user_agent.version %> # 22.0
Platform: <%= user_agent.platform %> # Macintosh
Mobile: <%= user_agent.mobile? %> # False
OS: <%= user_agent.os %> # OS X 10.8
Simon
  • 701
  • 6
  • 25
Chris Edwards
  • 3,514
  • 2
  • 33
  • 40
3

What you do is actually the way to do it. Now, you can process the user agent information with a regular expression, looking for matches on Firefox, Chrome or any other browser or version you like.

Spyros
  • 46,820
  • 25
  • 86
  • 129
  • @SyedRaza Google could have solved that problem for you as well. I mean there is nothing wrong with asking 'how do I go about this and that', but assuming that people will do your work for you here while you already know the 'how' is I think kind of lazy. – Mosselman Oct 30 '12 at 09:44
  • Do we have any method through which we can detect if the browser version is latest or not? Thanks in advance. – Mohd Anas Jul 22 '16 at 07:09
0

Though this is a frontend solution, I prefer to check for a specific feature that is required, such as flexbox. You can use something like Modernizr, or just a simple JavaScript check will do (https://stackoverflow.com/a/27047981/179311).

if(!("flexWrap" in document.documentElement.style)) {
    // IE 10, Chrome 20 and Firefox 27 and anything older will hit this.
    alert('your browser is out of date');
    // maybe this is preferred
    // window.location = '/browser-unsupported'
}
Community
  • 1
  • 1
bradlis7
  • 3,375
  • 3
  • 26
  • 34