2011-01-16 23 views
51

Hola a todos, me pregunto qué métodos son estándar dentro de la industria para hacer detección de navegadores en Rails. ¿Hay alguna gema, biblioteca o código de muestra en alguna parte que pueda ayudar a determinar el navegador y aplicar una clase o identificación al elemento del cuerpo del (X) HTML? Gracias, me pregunto qué usan todos y si hay un método aceptado para hacer esto.Rails Browser Detection Methods

Sé que podemos obtener user.agent y analizar esa cadena, pero no estoy seguro de si es una forma aceptable de detectar el navegador.

Además, no estoy tratando de debatir la detección de características aquí, he leído varias respuestas para eso en StackOverflow, todo lo que estoy pidiendo es lo que ustedes han hecho.

[ACTUALIZACIÓN]

Así que gracias a faunzy en GitHub, he especie de entender un poco acerca de la comprobación del agente de usuario en Rails, pero aún no está seguro si esta es la mejor manera de hacerlo en Rails 3. Pero aquí es lo que he conseguido hasta ahora:

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 

Respuesta

23

Hay biblioteca rubí biblioteca encima en GitHub: https://github.com/gshutler/useragent

Yo lo uso yo, y está funcionando según lo anunciado hasta ahora. Para su caso de uso, probablemente pueda llamar a la biblioteca desde un método de ayuda en su proyecto de Rails o algo similar.

Dicho esto, no estoy del todo seguro si el HTTP_USER_AGENT está expuesto a los métodos de ayuda de Rails. En caso de que no esté expuesto, siempre puede exponer un método de controlador como ayudante (usando AbstractController::Helpers::ClassMethods#helper_method).

+0

Gracias por la referencia, he usado esa biblioteca para crear la mía. – alvincrespo

+4

Tengo curiosidad ... ¿qué agregaron en su versión de la biblioteca? ¿El código fuente está disponible en alguna parte? –

+0

El enlace está muerto. : x –

4

Trate request.env['HTTP_USER_AGENT'], esto devolverá agente de usuario de su cliente. También hay un ayudante rápida Publicado por Hubert Łępicki

+0

Probé HTTP_REFERER pero no devolvió nada, así que utilicé HTTP_USER_AGENT y devolvió el agente de usuario correcto, sin embargo estoy buscando un método particular que las personas hayan usado para analizar esta cadena, por ejemplo, como una expresión regular personalizada o biblioteca que existe que hace esto por usted, más o menos como un ayudante. – alvincrespo

+0

El referente no está relacionado con el agente de usuario. Aquí es donde se hace referencia a un recurso (por ejemplo, qué url cargó una imagen o qué otra página cargó la página, etc.) – xinit

+0

Lo siento, me refería al agente de usuario. Y lo vinculé a lo mismo ... – farnoy

57

La gema browser está diseñada específicamente para la detección de navegadores en Rails.

+0

No sabía nada de la gema, ¡me ayudó mucho! –

+0

para tabletas solo conoce ipad y android a partir de hoy – Evan

+0

Lo hemos usado extensamente en aplicaciones de big data; es muy bueno. Incluso puedes modificarlo un poco para descartar bots; Creo que hice una solicitud de extracción con la capacidad de hacerlo. – rcd