检测Web浏览器或移动设备以显示链接

时间:2015-11-03 03:33:52

标签: ruby-on-rails mobile

我正在编写rails应用程序,需要为移动用户向普通的Web浏览器用户提供不同的链接。例如,如果用户在移动设备上,我想显示:

<a href="instagram://user?username=<%= photo.author %>" target="_blank" class="btn btn-info btn-block"><i class="fa fa-instagram"></i> Captured by <%= photo.author %></a>

如果用户在浏览器上,我想显示:

<a href="http://instagram.com/<%= photo.author %>" target="_blank" class="btn btn-info btn-block"><i class="fa fa-instagram"></i> Captured by <%= photo.author %></a>

最好的方法是什么?感谢

3 个答案:

答案 0 :(得分:7)

浏览器数据以user_agent对象的形式出现:

#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   helper_method :mobile?

   private

   def mobile? # has to be in here because it has access to "request"
      request.user_agent =~ /\b(Android|iPhone|iPad|Windows Phone|Opera Mobi|Kindle|BackBerry|PlayBook)\b/i
   end
end

这样您就可以在视图中使用以下内容:

#app/views/controller/view.html.erb
<% if mobile? %>
   ... do something for mobile
<% else %>
   ... do something else
<% end %>

老实说,我不明白为什么人们会对他们的移动界面进行硬编码工作。如果您正确使用CSS media queries,则不应该对文件有任何问题,尽管您的情况似乎确实需要服务器端条件。

答案 1 :(得分:0)

我猜你要实现deep linking。为此,我建议你使用deeplink.me。但是如果你想以rails方式进行,那么就有一个名为browser的宝石。以下代码将帮助您进行设置。

<强>的Gemfile:

Get-ADGroup -Anr

然后在你的

application_controller.rb:

gem 'browser'

最后在你的观点中,你可以这样做:

class ApplicationController < ActionController::Base
  before_filter :get_browser

  def get_browser
    @browser = Browser.new(:ua => request.user_agent)
  end   
end

答案 2 :(得分:-3)

我建议您使用像Bootstrap或Foundation这样的前端工作。这些框架允许您定位到移动视图和桌面视图。