`
jsntghf
  • 浏览: 2533582 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

ruby中获取浏览器以及系统平台信息

阅读更多

首先写一个类,用来封装获取系统平台以及浏览器信息的方法

 

class Info
  attr_accessor :env, :browser, :platform

  def initialize(request)
    self.env = request
    get_platform
    get_browser
  end

  protected
  #获取系统平台
  def get_platform
    begin
      if self.env['HTTP_USER_AGENT'] =~ /Win/i
        self.platform = "Windows"
      elsif self.env['HTTP_USER_AGENT'] =~ /Mac/i
        self.platform = "Mac"
      elsif self.env['HTTP_USER_AGENT'] =~ /BSD/i
        self.platform = "FreeBSD";
      elsif self.env['HTTP_USER_AGENT'] =~ /Linux/i
        self.platform = "Linux";
      elsif self.env['HTTP_USER_AGENT'] =~ /SunOS/i
        self.platform = "Sun Solaris";
      elsif  self.env["HTTP_USER_AGENT"] =~ /iPhone/i
        self.platform = "iPhone";
      else
        self.platform = nil
      end
    rescue
      self.platform = nil
    end
  end

  #获取浏览器信息
  def get_browser
    self.browser = {
      :type => nil,
      :version => nil
    }
    begin
      #Internet Exlorer
      if self.env['HTTP_USER_AGENT'] =~ /MSIE/i && self.env['HTTP_USER_AGENT'].scan(/AOL|America Online Browser/i).empty?
        browser[:type] = "MSIE";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/MSIE ([\d\.]+)/i).to_s
        #Firefox/Firebird/Phoenix
      elsif self.env['HTTP_USER_AGENT'] =~ /Firefox|Firebird|Phoenix/i
        browser[:type] = "Firefox";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/[Firefox|Firebird|Phoenix].\/(\d.+)/i).to_s
        #Galeon
      elsif self.env['HTTP_USER_AGENT'] =~ /Galeon/i
        browser[:type] = "Galeon";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/Galeon\/([\d\.]+)/i).to_s
        #Safari
      elsif self.env['HTTP_USER_AGENT'] =~ /Safari/i
        browser[:type] = "Safari";
        browser[:version] = '0'
        #Opera
      elsif self.env['HTTP_USER_AGENT'] =~ /Opera/i
        browser[:type] = "Opera";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/Opera[ |\/]([\d\.]+)/i).to_s
        #AOL/America Online Browser
      elsif self.env['HTTP_USER_AGENT'] =~ /AOL|America Online Browser/i
        browser[:type] = "AOL"
        browser[:version] = if self.env['HTTP_USER_AGENT'] =~ /AOL/i
          self.env['HTTP_USER_AGENT'].scan(/AOL[ |\/]([\d.]+)/i).uniq.to_s
        else
          self.env['HTTP_USER_AGENT'].scan(/America Online Browser ([\d\.]+)/i).to_s
        end
        #Camino
      elsif self.env['HTTP_USER_AGENT'] =~ /Camino/i
        browser[:type] = "Camino";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/Camino\/([\d\.]+)/i).to_s
        #Konqueror
      elsif self.env['HTTP_USER_AGENT'] =~ /Konqueror/i
        browser[:type] = "Konqueror";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/Konqueror\/([\d.]+)/i).to_s
        #K-Meleon
      elsif self.env['HTTP_USER_AGENT'] =~ /K-Meleon/i
        browser[:type] = "K-Meleon";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/K-Meleon\/([\d.]+)/i).to_s
        #Firefox BonEcho
      elsif self.env['HTTP_USER_AGENT'] =~ /BonEcho/i
        browser[:type] = "Firefox BonEcho";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/BonEcho\/([\d.]+)/i).to_s
        #Netscape
      elsif self.env['HTTP_USER_AGENT'] =~ /Netscape/i
        browser[:type] = "Netscape";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/Netscape\/([\d.]+)/i).to_s
        #PSP
      elsif self.env['HTTP_USER_AGENT'] =~ /PlayStation Portable/i
        browser[:type] = "PlayStation Portable (PSP)";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/PlayStation Portable\); ([\d\.]+)/i).to_s
        #PlayStation 3
      elsif self.env['HTTP_USER_AGENT'] =~ /PlayStation 3/i
        browser[:type] = "PlayStation 3";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/PlayStation 3; ([\d\.]+)/i).to_s
        #Lynx
      elsif self.env['HTTP_USER_AGENT'] =~ /Lynx/i
        browser[:type] = "Lynx";
        browser[:version] = self.env['HTTP_USER_AGENT'].scan(/Lynx\/([\d\.]+)/i).to_s
      else
        browser[:type] = nil
        browser[:version] = nil
      end
    rescue
      browser[:type] = nil
      browser[:version] = nil
    end
  end

end

 

然后在application.rb中定义三个方法,分别用来获取浏览器的类型、版本以及系统平台

 

  def which_browser
    get_data
    return session[:info][:browser_type]
  end

  def which_browser_version
    get_data
    return session[:info][:browser_version]
  end

  def which_platform
    get_data
    return session[:info][:platform]
  end

  protected
  def get_data
    if session[:info].blank?
      info = Info.new(request.env)
      session[:info] = {}
      session[:info][:browser_type] = info.browser[:type]
      session[:info][:browser_version] = info.browser[:version]
      session[:info][:platform] = info.platform
    end
  end

 

以下是具体调用方法:

 

def info
    which_browser  #=> MSIE
    which_browser_version  #=> 7.0
    which_platform  #=> Windows
end

 

可以很容易的扩展Info类,从而增加新的功能。

分享到:
评论
2 楼 jhsea3do 2009-12-07  
PHP下用 browscap.ini, ruby下有没有对应类库阿?
1 楼 fanix 2009-12-05  
试试看, 正需要

相关推荐

    获取浏览器类型及平台信息ruby

    根据给定的信息,本文将详细解释如何通过 Ruby 语言来获取客户端...总之,通过 Ruby 获取浏览器类型和平台信息是一项非常实用的技术,它不仅可以帮助开发者更好地理解用户的需求,还可以提高 Web 应用的可用性和性能。

    Python获取浏览器窗口句柄过程解析

    下面将详细介绍如何利用Python和Selenium库来获取浏览器窗口句柄以及进行窗口切换的具体方法。 #### 1. 基础概念 - **句柄(Handle)**:句柄是计算机编程中的一个术语,通常用来表示某个对象的唯一标识符。在本篇...

    Ruby-DeviceDetector一个用Ruby编写的精确和快速的useragent解析器和设备探测器

    `User-Agent`通常包含了设备制造商、型号、操作系统版本以及浏览器信息,DeviceDetector则根据预定义的规则和模式来匹配这些信息。 该库的主要功能包括: 1. 设备识别:能够识别手机、平板、桌面电脑、智能电视等...

    Selenium 浏览器自动化测试工具 --- 跨浏览器、跨平台

    Selenium 的核心优势在于其跨浏览器和跨平台的能力,这意味着你可以在诸如Chrome、Firefox、Safari、Edge等不同浏览器上,以及Windows、Mac OS X或Linux等不同操作系统上运行相同的测试。 ### Selenium 的组件 1. ...

    个人健康档案系统-Ruby-JavaScript-下载

    在个人健康档案系统中,Ruby可能负责处理数据的存储、用户认证、业务逻辑等后端任务。 JavaScript在前端的应用则更为广泛,它允许开发者在用户浏览器上动态更新页面,实现丰富的交互效果。在PHR系统中,JavaScript...

    Ruby on Rails 手順

    你可以从RubyInstaller的GitHub页面获取DevKit,按照官方文档的指示将其与你的Ruby安装关联起来。这通常涉及将DevKit的路径添加到环境变量PATH中,然后运行初始化脚本来绑定Ruby安装。 4. **Rails安装**:有了Ruby...

    ruby-2.5.0.tar.gz

    Ruby-2.5.0是Ruby编程...以上就是在CentOS 6.5上利用`ruby-2.5.0.tar.gz`安装Redmine的详细过程,过程中需要注意系统的兼容性、依赖的正确安装以及安全配置。理解这些步骤将有助于顺利部署和管理Redmine项目管理平台。

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **示例**:例如,在博客系统中,一篇文章可以有多个评论,这就是典型的“一对多”关系。 #### 四、查询 - **方法**:使用Active Record的方法来进行数据库查询,如`find`、`where`、`joins`等。 - **优化**:...

    基于Ruby on Rails 的博客和新闻订阅系统.zip

    这个“基于Ruby on Rails的博客和新闻订阅系统”很可能是一个示例项目,旨在展示如何利用Rails框架来创建一个功能完备的在线平台,让用户能够发布博客文章、订阅新闻源,并进行相关的交互。 【描述】:“html5开发...

    ruby watir教程

    **Ruby Watir** 是一种用于网页自动化测试的工具库,它能够模拟用户在浏览器中的操作行为,如点击按钮、填写表单等,非常适合进行功能测试、回归测试和系统测试。 #### 二、安装Ruby Watir ##### 1. 安装Ruby环境 ...

    Ruby自动分级器_Ruby_HTML_下载.zip

    标题中的“Ruby自动分级器”指的是一个使用Ruby编程语言开发的工具,它的主要功能可能是对文本内容进行自动分类或评级,比如对学生作文、新闻文章等进行自动评分或归类。这个工具结合了HTML可能意味着它可能包含一个...

    Ruby语言教程&案例&相关项目资源

    - 确保您的系统中安装了Ruby和RubyGems。 - 通过命令行安装Watir和其驱动程序(以Selenium WebDriver为例,因为它支持多种浏览器): ```bash gem install watir-webdriver ``` 2. **编写第一个Watir脚本**: ...

    Ruby 语言教程 & 案例 & 相关项目资源

    安装完成后,可以使用以下命令来检查 Ruby 是否安装成功及版本信息: ```bash ruby -v ``` ##### 1.2 Hello World 程序 编写第一个 Ruby 程序,通常都是从最简单的 “Hello, World!” 程序开始。创建一个名为 `...

    Ruby-ApipieRubyonRailsAPI文档和展示工具使用Ruby语法

    description '列出系统中的所有用户,包括基本信息' param :page, Integer, desc: '页码', required: false param :per_page, Integer, desc: '每页显示数量', required: false def index @users = User.all...

    生成Ruby的离线文档

    4. **组织和浏览离线文档**:生成的HTML文档可以放在本地文件系统中,通过浏览器访问。用户可以创建一个索引页面,方便按需查找特定模块或类的文档。 标签 "源码" 和 "工具" 提示了这个过程涉及到对源码的操作以及...

    Ruby-Sprockets基于Rack的资源打包系统

    Ruby-Sprockets是一个强大的基于Rack的资源打包系统,主要设计用于简化Web应用程序中的静态资源(如JavaScript、CSS和图像)的管理和优化。在Rails框架中,Sprockets被广泛使用,它允许开发者以一种模块化和高效的...

    Watir1.6.5(commonwatir+firewatir+watir)+Ruby186-26

    3. **适应性强**:由于Watir支持多种浏览器,测试可以在不同的环境中进行,确保了Web应用的跨平台兼容性。 4. **开源社区支持**:Ruby和Watir都是开源项目,拥有活跃的社区,开发者可以获取到丰富的资源和帮助,...

    Ruby-Shrimp一个基于phantomjs的pdf渲染器

    Ruby-Shrimp是一个强大的工具,主要用于将网页内容转换为PDF文档,它基于PhantomJS,一个无头Webkit浏览器。PhantomJS是一个JavaScript驱动的浏览器,它允许开发者在没有实际图形界面的情况下运行页面,这对于自动化...

    开放Ruby+watir 自动化测试工具介绍+安装说明

    1. 下载Ruby的安装包:首先,你需要从官方或者其他可靠的来源获取适合你操作系统的Ruby安装程序。 2. 运行Setup:双击下载的安装文件,启动安装向导。 3. 同意许可协议:在欢迎界面后,点击“Next”,然后阅读并同意...

Global site tag (gtag.js) - Google Analytics