Rails 浏览器检测方法

Posted

技术标签:

【中文标题】Rails 浏览器检测方法【英文标题】:Rails Browser Detection Methods 【发布时间】:2011-06-10 02:15:48 【问题描述】:

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

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

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

[更新]

感谢 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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

感谢您的参考,我已经使用该库创建了自己的库。 我很好奇...您在您的库版本中添加了什么?源代码在某处可用吗?【参考方案2】:

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

【讨论】:

不知道它对我有很大帮助! 对于平板电脑,它现在只知道 ipad 和 android 我们在大数据应用中广泛使用了它;这很棒。您甚至可以对其进行一些修改以筛选出机器人;我相信我提出了一个有能力这样做的拉取请求。 注意:Ruby 1.9+ 仅限 AFAICT 浏览器仅适用于 ruby​​ 版本 >= 2.5.0【参考方案3】:

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

【讨论】:

我尝试了 HTTP_REFERER 但没有返回任何内容,因此我使用了 HTTP_USER_AGENT 并返回了正确的用户代理,但是我正在寻找人们用来解析此字符串的特定方法,例如为您执行此操作的自定义构建的正则表达式或库,有点像助手。 引用者与用户代理无关。这是引用资源的地方(例如,加载图像的 url 或加载页面的其他页面等)

以上是关于Rails 浏览器检测方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 iOS UIWebView 时的 Rails 布局(application.html.erb)逻辑

用 php 检测浏览器的最佳方法是啥?

在 Javascript 中进行浏览器检测的最佳方法是啥?

Rails 渲染头与状态

如何创建类似于 javascript 节流/去抖动功能的 Rails/Ruby 方法

JavaScript高级程序设计之客户端检测