2011-04-26 68 views
18

cómo puedo detectar el tipo de navegador y su versión en Rails. Quiero verificar la versión del navegador específico y si no es una versión requerida del navegador, solicito al usuario que lo actualice. Utilizo el comando especificado a continuación pero, como no sigue un patrón estándar, no puedo usarlo.Cómo detectar el tipo de navegador y su versión

request.env['HTTP_USER_AGENT'] 

Chrome out put is below 
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16 
Safari out put is below 
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1 
FireFox out put is below 
Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0 
Opera out put is below 
Opera/9.80 (Windows NT 5.1; U; en) Presto/2.8.131 Version/11.10 
Internet Explorer out put is below 
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727) 
+1

Oler el ''HTTP_USER_AGENT'' es la forma tradicional de hacerlo. Es posible que otras aplicaciones falsifiquen su código, o que un usuario cambie la firma de su navegador para engañarlo, así que no confíe en él explícitamente. –

Respuesta

21

Pruebe la gema navegador. Muy simple y puede resolver su propósito.

Puede encontrar la gema Here muy fácil de usar.

3

Lo que haces es en realidad la forma de hacerlo. Ahora puede procesar la información del agente de usuario con una expresión regular, buscando coincidencias en Firefox, Chrome o cualquier otro navegador o versión que desee.

+0

@SyedRaza Google podría haber resuelto ese problema también. Quiero decir que no hay nada de malo en preguntar "cómo hago esto y lo otro", pero suponiendo que la gente haga su trabajo aquí mientras usted ya sabe el "cómo" creo que es un poco vago. – Mosselman

+0

¿Tenemos algún método a través del cual podamos detectar si la versión del navegador es la última o no? Gracias por adelantado. –

27

NOTA: Tenga cuidado de algunos motores de búsqueda ven esto como un tipo de intrusión Ver (Google AGENTE DE USUARIO HTTP)

if request.env['HTTP_USER_AGENT'] =~ /[^\(]*[^\)]Chrome\// 

o en el caso de Firefox

if request.env['HTTP_USER_AGENT'] =~ /[^\(]*[^\)]*[^\t]Firefox\// 

y comprobar esto Aquí obtendrá todo lo que necesita browser Gem

browsers_detection_gem

y aquí es un método que puede detectar todos los navegadores tan frío hombre

def browser_detection 
    result = request.env['HTTP_USER_AGENT'] 
    browser_compatible = '' 
    if result =~ /Safari/ 
    unless result =~ /Chrome/ 
     version = result.split('Version/')[1].split(' ').first.split('.').first 
     browser_compatible = 'Application is not functional for Safari version\'s '+version if version.to_i < 5 
    else 
     version = result.split('Chrome/')[1].split(' ').first.split('.').first 
     browser_compatible = 'Application is not functional for Chrome version\'s '+version if version.to_i < 10 
    end 
    elsif result =~ /Firefox/ 
    version = result.split('Firefox/')[1].split('.').first 
    browser_compatible = 'Application is not functional for Firefox version\'s '+version if version.to_i < 5 
    elsif result =~ /Opera/ 
    version = result.split('Version/')[1].split('.').first 
    browser_compatible = 'Application is not functional for Opera version\'s '+version if version.to_i < 11 
    elsif result =~ /MSIE/ 
    version = result.split('MSIE')[1].split(' ').first 
    browser_compatible = 'Application is not functional for Microsoft Internet Explorer version\'s '+version if version.to_i < 9 
    end 
    browser_compatible 
end 
8

También hay useragent joya:

<% user_agent = UserAgent.parse(request.env["HTTP_USER_AGENT"]) %> 
App: <%= user_agent.application %> # Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) 
Browser: <%= user_agent.browser %> # Firefox 
Version: <%= user_agent.version %> # 22.0 
Platform: <%= user_agent.platform %> # Macintosh 
Mobile: <%= user_agent.mobile? %> # False 
OS: <%= user_agent.os %> # OS X 10.8 
+0

muchas gracias. exactamente lo que estaba buscando: D –

0

Aunque esta es una solución frontend, prefiero para comprobar si hay una característica específica que se requiere, como FlexBox. Puede usar algo como Modernizr, o simplemente una simple comprobación de JavaScript lo hará (https://stackoverflow.com/a/27047981/179311).

if(!("flexWrap" in document.documentElement.style)) { 
    // IE 10, Chrome 20 and Firefox 27 and anything older will hit this. 
    alert('your browser is out of date'); 
    // maybe this is preferred 
    // window.location = '/browser-unsupported' 
} 
Cuestiones relacionadas