2011-01-16 12 views
51

Hey alle, ich frage mich, welche Methoden sind Standard in der Branche Browsererkennung in Rails zu tun? Gibt es irgendwo einen Edelstein, eine Bibliothek oder einen Beispielcode, der den Browser bestimmen und eine Klasse oder ID auf das Body-Element des (X) HTML anwenden kann? Danke, ich frage mich nur, was jeder benutzt und ob es eine akzeptierte Methode dafür gibt?Rails Browser Detection Methoden

Ich weiß, dass wir die user.agent abrufen und diese Zeichenfolge analysieren können, aber ich bin mir nicht sicher, ob das eine akzeptable Möglichkeit ist, die Browsererkennung durchzuführen.

Außerdem versuche ich hier nicht über Feature-Erkennung zu debattieren, ich habe mehrere Antworten dafür auf StackOverflow gelesen, alles was ich verlange ist, was ihr getan habt.

[UPDATE]

So dank faunzy auf GitHub, habe ich irgendwie ein wenig verstehen, über die User-Agenten in Rails prüft, aber immer noch nicht sicher, ob dies der beste Weg, um es in Rails zu gehen 3. Aber hier ist, was ich bisher bekommen habe:

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 

Antwort

23

Es gibt Bibliothek Rubin Bibliothek über auf GitHub: https://github.com/gshutler/useragent

ich es selbst verwenden, und es funktioniert wie bisher beworben. Für Ihren Anwendungsfall könnten Sie wahrscheinlich die Bibliothek innerhalb einer Hilfsmethode in Ihrem Rails-Projekt oder etwas Ähnlichem aufrufen.

Das sagte, ich bin nicht ganz sicher, ob die HTTP_USER_AGENT Rails-Helper-Methoden ausgesetzt ist. Wenn es nicht verfügbar ist, könnten Sie immer eine Controller-Methode als Helfer verfügbar machen (mit AbstractController::Helpers::ClassMethods#helper_method).

+0

Danke für die Referenz, ich habe diese Bibliothek benutzt, um meine eigene zu erstellen. – alvincrespo

+4

Ich bin neugierig ... Was haben Sie in Ihrer Version der Bibliothek hinzugefügt? Ist der Quellcode irgendwo verfügbar? –

+0

Der Link ist tot. : x –

4

request.env['HTTP_USER_AGENT'] Versuchen, dies wird Ihre Kunden User Agent zurück. Es gibt auch einen schnellen Helfer veröffentlicht von Hubert Łępicki

+0

Ich versuchte HTTP_REFERER, aber das gab nichts zurück, also benutzte ich HTTP_USER_AGENT und es gab den korrekten Benutzeragenten zurück, jedoch suche ich nach bestimmten Methoden, die Leute verwendet haben, um diese Zeichenkette zu analysieren, zum Beispiel wie eine benutzerdefinierte regex oder Bibliothek, die existiert, die das für dich tut, quasi wie ein Helfer. – alvincrespo

+0

Der Verweis bezieht sich nicht auf den Benutzeragenten. Dies ist, wo eine Ressource verwiesen wird (z. B. welche URL ein Bild geladen hat oder welche andere Seite die Seite geladen hat usw.) – xinit

+0

Entschuldigung, ich meinte User Agent. Und ich habe dich mit demselben Ding verbunden ... – farnoy

57

Der browser Edelstein wurde speziell für die Browsererkennung in Rails entwickelt.

+0

Wusste nicht über das Juwel, es hat mir sehr geholfen! –

+0

für Tablets weiß es nur ipad und android ab heute – Evan

+0

Wir haben dies ausgiebig in Big-Data-Apps verwendet; es ist sehr gut. Sie können es sogar ein wenig modifizieren, um Bots auszusortieren; Ich glaube, ich habe eine Pull-Anfrage mit der Fähigkeit dazu gemacht. – rcd