Rails如何检测移动设备?

36

有没有一种“Rails方式”来检测用户是否使用移动设备?我的意思是在erb中可以使用的方法,像这样:

<% if mobile? %>
5个回答

25

4
似乎 active_device 处于非活动状态。 - dquimper
请问您能否更新答案,将您的回答与下面的回答结合起来,因为如 https://www.ruby-toolbox.com/projects/browser 所示,browser gem 更常用。 - David Clavijo
如何进行测试,我的意思是我该如何告诉Respect现在要将其作为移动设备运行? - Andrey Drozdov
代理嗅探是一种相当不完美的方法,无论您选择嗅探的实现方式如何,随着时间的推移,其准确性都会降低。 - pixelearth

22

使用 browser gem。你可以通过自定义user_agent检测浏览器。


1
你知道Google Chrome的移动浏览器模拟器是否能够检测到使用该宝石库的browser.mobile?吗? - Joe Morano
1
browser很好,但需要> ruby 2。如果你卡在1.9.3上(就像我一样),可以查看https://github.com/tscolari/mobylette。 - Alex Moore-Niemi
1
@JoeMorano 我在Chrome的模拟器中测试可以正常工作。 - CHawk
“browser” 在2020年似乎仍在维护,并且随着时间的推移使用量只增加了。 - Daniel Nalbach

19

application_helper.rb中:

def device
  agent = request.user_agent
  return "tablet" if agent =~ /(tablet|ipad)|(android(?!.*mobile))/i
  return "mobile" if agent =~ /Mobile/
  return "desktop"
end
然后您可以在视图中使用它:
<% if device == "mobile" %>
  Show something for mobile users.
<% end %>

4
我建议使用device_detector,它非常快速且易于部署。您只需将用户代理字符串传递给它即可,对于Rails 5可以使用request.user_agent进行传递。"最初的回答"
@user_agent = request.user_agent

@client = DeviceDetector.new(@user_agent)

@client.device_type 

注意:设备类型可以是以下之一:台式机、智能手机、平板电脑、游戏机、便携式媒体播放器、电视、汽车浏览器、相机。
最初的回答:https://github.com/podigee/device_detector

-1
你也可以通过在 application.html.erb 的头部标签中 包含 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 来解决这个问题。
只要你的网站是响应式的(例如使用 Bootstrap),那么就应该没问题了。

1
该问题旨在检查用户代理是否为移动设备。您的答案旨在实现响应式行为,这与问题意图非常不同。 - João Ramires

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