Oh!Coder

Coding Life

Browser Gem简介

| Comments

今天和大家分享一个检测浏览器的gem,名字叫Browser。功能上来说,比较单一,下面直接介绍。

基本使用

安装

1
gem install browser

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
require "rubygems"
require "browser"

browser = Browser.new(:ua => "some string", :accept_language => "en-us")
browser.name            # readable browser name
browser.version         # major version number
browser.full_version
browser.safari?
browser.opera?
browser.chrome?
browser.chrome_os?
browser.mobile?
browser.tablet?
browser.console?
browser.firefox?
browser.ie?
browser.ie6?            # this goes up to 11
browser.modern?         # Webkit, Firefox 17+, IE 9+ and Opera 12+
browser.platform        # return :mac, :windows, :linux or :other
browser.mac?
browser.windows?
browser.windows_x64?
browser.linux?
browser.blackberry?
browser.bot?
browser.search_engine?
browser.phantom_js?
browser.quicktime?
browser.core_media?
browser.silk?
browser.known?          # has the browser been successfully detected?
browser.meta            # an array with several attributes
browser.to_s            # the meta info joined by space

关于测试实现可以参考更多例子。

定义了哪些现代浏览器?

对于当前浏览器的规则定义非常的宽松:

  • Webkit
  • IE9+
  • Firefox 17+
  • Firefox Tablet 14+
  • Opera 12+

可以根据自己的需要对规则进行自定义。一条规则必须是一个proc/lambda或任何以方法实现的browser对象。为了重定义所有规则,在添加你自己的规则之前需要先清除已经存在的规则。

1
2
3
# Only Chrome Canary is considered modern.
Browser.modern_rules.clear
Browser.modern_rules << -> b { b.chrome? && b.version >= '37' }

整合进Rails

只需要在Gemfile里添加下面这一行代码。

1
gem "browser"

在帮助方法里增加了一个称为browser的方法,这个方法审查了当前的用户代理。

1
2
3
<% if browser.ie6? %>
  <p class="disclaimer">You're running an older IE version. Please update it!</p>
<% end %>

Bot

Browser可以像机器人一样检测空的用户代理。如果想把检测的数据拿回来,可以通过如下语句激活这种行为:

1
Browser::Bots.detect_empty_ua!

Middleware

可以用Browser::Middleware来重定向用户代理。

1
2
3
use Browser::Middleware do
  redirect_to "/upgrade" unless browser.modern?
end

如果你正在使用Rails,可以使用route辅助方法。只要添加一个初始化的文件(config/initializers/browser.rb)。

1
2
3
Rails.configuration.middleware.use Browser::Middleware do
  redirect_to upgrade_path unless browser.modern?
end

注意你可以有多个条件。

1
2
3
4
5
Rails.configuration.middleware.use Browser::Middleware do
  next if browser.search_engine?
  redirect_to upgrade_path(browser: "oldie") if browser.ie? && !browser.modern?
  redirect_to upgrade_path(browser: "oldfx") if browser.firefox? && !browser.modern?
end

如果你需要访问Rack::Request对象,可以像下面这样使用request

1
2
3
Rails.configuration.middleware.use Browser::Middleware do
  redirect_to upgrade_path unless browser.modern? || request.env['PATH_INFO'] == '/exclude_me'
end

更多

嗯,更多内容,可以参见文档

Comments