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)逻辑