Rails浏览器检测方法

52

大家好,我想知道在Rails中进行浏览器检测的标准方法是什么?是否有gem、库或示例代码可以帮助确定浏览器并将类或id应用于(X)HTML的body元素?谢谢,我只是想知道大家都使用什么方法,是否有一种被接受的方法来做这件事情?

我知道我们可以获取用户代理并解析该字符串,但我不确定这是否是进行浏览器检测的可接受方式。

此外,我不想在这里讨论特性检测,我已经在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
3个回答

63

browser宝石 gem 是专门为了在Rails中检测浏览器而设计的。


不知道这个 gem,但它对我帮助很大! - Andrew Burns
截至今天,对于平板电脑来说,它只能识别iPad和Android系统。 - Evan
我们在大数据应用中广泛使用了它,效果非常好。你甚至可以稍微修改一下来筛选掉机器人,我相信我已经提交了一个具备这种能力的拉取请求。 - rcd
注意:据我所知,仅适用于Ruby 1.9+ - robd
浏览器仅适用于 Ruby 版本 >= 2.5.0。 - gangothri
这个帮了我很多,非常感谢你的回答。现在只有当浏览器不是机器人时,所有我的统计数据才增加。 - Sean Mitchell

23

这里有一个Ruby库,托管在GitHub上:https://github.com/gshutler/useragent

我自己使用它,目前它的表现与广告相符。对于您的用例,您可以在Rails项目中的辅助方法中调用该库或类似的东西。

话虽如此,我不完全确定HTTP_USER_AGENT是否暴露给Rails辅助方法。如果没有暴露,您可以始终将控制器方法公开为辅助方法(使用AbstractController :: Helpers :: ClassMethods#helper_method )。


谢谢提供参考,我已经使用那个库创建了自己的。 - alvincrespo
4
我很好奇...你在库的版本中添加了什么?源代码可以在哪里找到? - Christoph Schiessl

5

尝试使用request.env['HTTP_USER_AGENT'],这将返回您客户端的用户代理。还有一个快速帮助程序,由Hubert Łępicki发布。


我尝试了HTTP_REFERER,但没有返回任何内容,所以我使用了HTTP_USER_AGENT,并返回了正确的用户代理,但是我正在寻找人们用于解析此字符串的特定方法,例如像自定义构建的正则表达式或现有的库,可以为您完成此操作,就像一个助手一样。 - alvincrespo
引荐者与用户代理无关。这是指资源的来源(例如加载图像的URL或加载页面的其他页面等)。 - xinit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接