52

大家好,我想知道在 Rails 中进行浏览器检测的行业标准方法是什么?是否有 gem、库或示例代码可以帮助确定浏览器并将类或 id 应用于 (X)HTML 的正文元素?谢谢,我只是想知道每个人都使用什么以及是否有公认的方法?

我知道我们可以获取 user.agent 并解析该字符串,但我不确定这是否是一种可接受的浏览器检测方式。

另外,我不想在这里讨论特征检测,我已经在 StackOverflow 上阅读了多个答案,我所要求的只是你们做了什么。

[更新]

所以感谢GitHub 上的faunzy,我对在 Rails 中检查用户代理有点了解,但仍然不确定这是否是在 Rails 3 中进行此操作的最佳方法。但这就是我得到的远的:

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
4

3 回答 3

62

浏览器gem 是专门为 Rails 中的浏览器检测而设计的。

于 2011-12-10T21:04:03.443 回答
23

GitHub 上有库 ruby​​ 库:https ://github.com/gshutler/useragent

我自己使用它,到目前为止它的工作方式与宣传的一样。对于您的用例,您可能可以从 Rails 项目或类似的辅助方法中调用该库。

也就是说,我不完全确定是否HTTP_USER_AGENT暴露于 Rails 辅助方法。如果它没有公开,您总是可以将控制器方法公开为帮助程序(通过使用AbstractController::Helpers::ClassMethods#helper_method)。

于 2011-01-16T21:20:14.760 回答
5

试试request.env['HTTP_USER_AGENT'],这将返回您客户的用户代理。Hubert Łępicki还发布了一个快速帮手

于 2011-01-16T19:13:42.803 回答