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
see: http://stackoverflow.com/questions/4707400/rails-browser-detection-methods
分享到:
相关推荐
Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多...
6. **接收和分析响应**:客户端接收响应,根据返回值判断是否继续执行测试脚本的下一步。 二、实例解析 以Ruby绑定的Firefox WebDriver为例,以下代码用于打开Firefox并导航到Google首页: ```ruby driver = ...
4. Ruby:Ruby on Rails框架中的远程代码执行漏洞和路径穿越漏洞。 5. Node.js:Express模块存在的任意文件读取漏洞。 6. Docker:利用API和SSRF漏洞进行UNIX Socket通信,进行文件读取。 五、客户端安全 客户端...
A)通过 Selenium IDE 生成的测试代码怎么在 Selenium RC 上有效的配置并运行,这个步骤很重要的,因为目前的 Selenium IDE 不支持 IE,只能生成的代码通过 Core 手工执行或基于 Selenium RC 放入 Java、Ruby 的单元...
通过工具如Koala编译器,开发者可以将Sass代码编译成标准CSS,从而在不同的浏览器中实现兼容显示。 Sass的继承机制可以理解为选择器之间的组合,通过继承可以复用同一套样式规则。使用继承可以减少CSS代码量,让...
而Less则依赖JavaScript,可以通过客户端或服务器端(使用Node.js)的编译器如less.js或Gulp、Webpack的插件进行编译。 在CSS3的支持方面,两者都能帮助简化跨浏览器兼容性问题,特别是处理前缀。然而,Sass在这...
- **编程语言支持**:Selenium RC 提供了针对 Java、C#、Python、Ruby 等多种语言的客户端库,每种语言都有专门的 API 接口用于执行 Selenese 命令。 - **API 使用**:通过客户端库的 API 可以编写简单的 Selenium ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
最后,Bootstrap 还需要考虑浏览器的兼容性问题,通过 CSS 的前缀、JavaScript 的兼容性代码,以及一些 Polyfill 来确保 Bootstrap 能够在不同版本的浏览器中正常工作。 总结来说,Bootstrap 的实现原理涉及到了 ...
- **客户端-服务器模型**:用户通过浏览器向服务器发送请求,服务器处理请求并返回结果给用户。 #### 3. 网站开发语言 - **HTML**(超文本标记语言):用于定义网页结构的基础语言。 - **CSS**(层叠样式表):用于...
1. **Ruby编程语言**: Ruby是一种面向对象的、动态类型的编程语言,以其简洁的语法和对开发者友好而著称。在这个场景中,它用于编写监控脚本,检查苹果服务的状态。 2. **命令行执行**: "ruby apple_is_dead.rb" ...
JavaScript是一种广泛应用于网页开发的编程语言,它允许在客户端动态更新网页内容,提供了丰富的用户交互体验。 项目运行步骤: 1. 首先,你需要解压名为“tictactoe_rack-master”的压缩包文件。 2. 在解压后的...
这段代码判断当前窗口是否为主窗口,如果不是,就调用父窗口的`navigate`方法,将当前页面的URL导航到父窗口,从而避免死循环的问题。这种方法在Firefox中能正常工作。 除了JavaScript,我们还可以使用服务器端编程...
常用的方法包括逻辑覆盖法(如语句覆盖、判断覆盖、条件覆盖等)、路径覆盖等。 #### 静态测试与动态测试 - **静态测试**:无需实际运行软件,而是通过审查和走查等方式对文档、代码等进行分析,目的是尽早发现...
在尝试实现AJAX树的过程中,作者最初考虑沿用之前的JavaScript函数,但这种方式实质上是在服务器端生成一串JavaScript代码,一次性返回给客户端执行,这违背了AJAX的初衷。随后,作者尝试移植.NET版的AJAX树,但由于...
- **Ruby on Rails**:遵循“约定优于配置”的理念,快速开发并自动处理常见问题。 ### 搭建开发环境 #### 四、安装和配置开发环境 - **语言解释器/编译器**:例如Node.js、Python解释器等。 - **包管理工具**:...
客户端(如浏览器)在后续请求相同资源时,会将之前的ETag值发送回服务器,服务器通过比较新旧ETag判断资源是否已更新,从而决定是否需要重新发送整个响应。 在Phoenix框架中,`phoenix_etag`库提供了集成ETag机制...
集成uWSGI协议,支持Python、Ruby等动态语言的应用。 #### 3.25 SplitClients模块(SplitClients) 根据客户端特征将流量分流至不同后端服务器。 ### 四、Nginx可选HTTP模块(Optional HTTP Modules) 这一类...
- **实现页面路由**:React Router是一个用于实现客户端路由的库,可以方便地在SPA中实现页面跳转。 - **生命周期方法**: - **类组件的生命周期**:分为挂载阶段、更新阶段和卸载阶段。 - **函数组件的Hook**:...
纯JavaScript类库 – 兼容任何服务器端和客户端技术 Pure JavaScript library - works with any server or client-side technology 可添加到Web程序最上部 – 不需要大的架构改变 Can be added on top of your ...