2011-01-16 21 views
51

Hej, Zastanawiałem się, jakie metody są standardem w branży do wykrywania przeglądarek w Railsach? Czy istnieje jakiś klejnot, biblioteka lub przykładowy kod, który może pomóc określić przeglądarkę i zastosować klasę lub identyfikator do elementu treści (X) HTML? Dzięki, po prostu zastanawiam się, co każdy używa i czy istnieje akceptowana metoda robienia tego?Metody wykrywania przeglądarki Railsów

Wiem, że możemy pobrać user.agent i przeanalizować ten ciąg, ale nie jestem pewien, czy jest to akceptowalny sposób wykrywania przeglądarki.

Ponadto, nie próbuję debatować o wykrywaniu obiektów tutaj, czytałem wiele odpowiedzi na to w StackOverflow, wszystko, o co proszę, to to, co zrobiliście.

[UPDATE]

Więc dzięki faunzy na GitHub, ja rodzaj zrozumieć trochę o sprawdzenie agent użytkownika w Rails, ale nadal nie wiem, czy jest to najlepszy sposób, aby przejść o tym w Rails 3. Ale tutaj jest to, co ja dotarłeś tak daleko:

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 

Odpowiedz

23

tam biblioteki Ruby biblioteki nad na GitHub: https://github.com/gshutler/useragent

Używam go sobie, a to działa jak reklamowane tak daleko. Dla twojego przypadku użycia możesz prawdopodobnie wywołać bibliotekę z poziomu metody pomocniczej w twoim projekcie Railsowym lub podobnym.

To powiedziawszy, nie jestem całkowicie pewien, czy HTTP_USER_AGENT jest narażony na metody pomocnicze Rails. W przypadku, gdy nie jest on odsłonięty, zawsze można wystawić metodę kontrolera jako pomocnika (przy użyciu AbstractController::Helpers::ClassMethods#helper_method).

+0

Dzięki za referencje, użyłem tej biblioteki, aby stworzyć własną. – alvincrespo

+4

Jestem ciekawy ... co dodałeś w swojej wersji biblioteki? Czy kod źródłowy jest gdzieś dostępny? –

+0

Link nie działa. : x –

4

Spróbuj request.env['HTTP_USER_AGENT'], będzie to powrót agenta obsługi klienta. Jest też szybki pomocnik wysłane przez Hubert Łępicki

+0

Próbowałem HTTP_REFERER, ale to nic nie zwróciło, więc użyłem HTTP_USER_AGENT i zwróciłem poprawny agent użytkownika, jednak szukam konkretnych metod, które ludzie wykorzystali do parsowania tego łańcucha, na przykład jak niestandardowe wyrażenie regularne lub bibliotekę, która istnieje dla ciebie, coś w rodzaju pomocnika. – alvincrespo

+0

Obiekt odsyłający nie jest powiązany z agentem użytkownika. W tym miejscu zasób pochodzący z (np. Jaki URL załadował obraz lub jaka strona załadowała stronę itd.) – xinit

+0

Przepraszam, miałem na myśli klienta użytkownika. I połączyłem cię z tym samym ... – farnoy

57

Klejnot został zaprojektowany specjalnie do wykrywania przeglądarki w Railsach.

+0

Nie wiedziałem o tym klejnocie, to bardzo mi pomogło! –

+0

dla tabletów zna tylko iPada i Androida na dzień dzisiejszy – Evan

+0

Wykorzystaliśmy to szeroko w dużych aplikacjach danych; to jest bardzo dobre. Możesz go nawet trochę zmodyfikować, aby odfiltrować boty; Uważam, że złożyłem wniosek o zwolnienie z możliwością tego. – rcd

Powiązane problemy