Rails Browser Detection Methods

Ruby on-RailsRubyUser AgentBrowser Detection

Ruby on-Rails Problem Overview


Hey Everyone, I was wondering what methods are standard within the industry to do browser detection in Rails? Is there a gem, library or sample code somewhere that can help determine the browser and apply a class or id to the body element of the (X)HTML? Thanks, I'm just wondering what everyone uses and whether there is accepted method of doing this?

I know that we can get the user.agent and parse that string, but I'm not sure if that is that is an acceptable way to do browser detection.

Also, I'm not trying to debate feature detection here, I've read multiple answers for that on StackOverflow, all I'm asking for is what you guys have done.

[UPDATE]

So thanks to faunzy on GitHub, I've sort of understand a bit about checking the user agent in Rails, but still not sure if this is the best way to go about it in Rails 3. But here is what I've gotten so far:

def users_browser
user_agent =  request.env['HTTP_USER_AGENT'].downcase 
@users_browser ||= begin
  if user_agent.index('msie') && !user_agent.index('opera') && !user_agent.index('webtv')
  				'ie'+user_agent[user_agent.index('msie')+5].chr
	elsif user_agent.index('gecko/')
		'gecko'
	elsif user_agent.index('opera')
		'opera'
	elsif user_agent.index('konqueror')
		'konqueror'
	elsif user_agent.index('ipod')
		'ipod'
	elsif user_agent.index('ipad')
		'ipad'
	elsif user_agent.index('iphone')
		'iphone'
	elsif user_agent.index('chrome/')
		'chrome'
	elsif user_agent.index('applewebkit/')
		'safari'
	elsif user_agent.index('googlebot/')
		'googlebot'
	elsif user_agent.index('msnbot')
		'msnbot'
	elsif user_agent.index('yahoo! slurp')
		'yahoobot'
	#Everything thinks it's mozilla, so this goes last
	elsif user_agent.index('mozilla/')
		'gecko'
	else
		'unknown'
	end
	end
	
	return @users_browser
end

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

The browser gem is specifically designed for browser detection in Rails.

Solution 2 - Ruby on-Rails

There's library ruby library over at GitHub: https://github.com/gshutler/useragent

I use it myself, and it's working as advertised so far. For your use case, you could probably call the library from within a helper method in your Rails project or something similar.

That said, I'm not completely sure if the HTTP_USER_AGENT is exposed to Rails helper methods. In case it isn't exposed, you could always expose a controller method as a helper (by using AbstractController::Helpers::ClassMethods#helper_method).

Solution 3 - Ruby on-Rails

Try request.env['HTTP_USER_AGENT'], this will return your client's User Agent. There's also a quick helper posted by Hubert Łępicki

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionalvincrespoView Question on Stackoverflow
Solution 1 - Ruby on-RailsRobView Answer on Stackoverflow
Solution 2 - Ruby on-RailsChristoph SchiesslView Answer on Stackoverflow
Solution 3 - Ruby on-RailsfarnoyView Answer on Stackoverflow