2011-01-16 4 views
51

안녕하세요, 저는 모두 업계에서 레일스에서 ​​브라우저 탐지를 위해 어떤 방법이 표준인지 궁금합니다. 브라우저를 결정하고 (X) HTML의 본문 요소에 클래스 또는 ID를 적용하는 데 도움이 될 수있는 보석, 라이브러리 또는 샘플 코드가 있습니까? 고마워, 나는 모두가 무엇을 사용하고 있는지 그리고 이것을 수행하는 허용 된 방법이 있는지 궁금해하고있다.레일 브라우저 감지 방법

우리는 user.agent를 가져 와서 해당 문자열을 구문 분석 할 수 있음을 알고 있지만 브라우저 감지를 수행하는 것이 허용되는지 여부는 확실하지 않습니다.

또한 여기서는 지형지 물 감지에 대해 논쟁하지 않으려 고합니다. StackOverflow에서 여러 답변을 읽었습니다. 내가 한 모든 질문은 사용자가 수행 한 작업입니다. 이 레일에 대해 이동하는 가장 좋은 방법 인 경우 여전히

[업데이트]

GitHub의에 faunzy 덕분에, 나는 종류의 레일에서 사용자 에이전트 확인에 대한 약간의 이해했습니다 그래서,하지만 확실하지 3. 그러나 여기 내가 지금까지 들어 왔 것입니다 :

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 

답변

23

라이브러리 루비 라이브러리가 GitHub의에 이상있다가 게시 빠른 도우미도있다 : https://github.com/gshutler/useragent

나 자신을 그것을 사용, 그리고 지금까지 광고로 작동합니다. 당신의 유스 케이스의 경우, 당신은 Rails 프로젝트 나 비슷한 것에 도우미 메서드 내에서 라이브러리를 호출 할 수있다.

그렇다면 HTTP_USER_AGENT이 Rails 헬퍼 메소드에 노출되어 있는지 확실하지 않습니다. 노출되지 않는 경우 컨트롤러 메서드를 도우미로 노출시킬 수 있습니다 (AbstractController::Helpers::ClassMethods#helper_method 사용).

+0

참고를 위해 고마워, 나는 내 자신을 창조하기 위해 그 도서관을 사용 해왔다. – alvincrespo

+4

내가 궁금한데 ... 도서관의 버전에 무엇을 추가 했습니까? 소스 코드를 사용할 수 있습니까? –

+0

링크가 작동하지 않습니다. : x –

4

request.env['HTTP_USER_AGENT'], 이것은 고객의 사용자 에이전트를 반환보십시오. 이 Hubert Łępicki

+0

HTTP_REFERER를 시도했지만 HTTP_USER_AGENT를 사용하여 올바른 사용자 에이전트를 반환했지만 아무 것도 반환하지 않았습니다. 그러나이 문자열을 구문 분석하는 데 사용 된 특정 메서드를 찾고 있습니다. 예를 들어 사용자 지정 정규식 또는 당신을 위해 이것을하는 존재 라이브러리, 도우미와 같은 일종의. – alvincrespo

+0

리퍼러는 사용자 에이전트와 관련이 없습니다. 이것은 리소스가 참조 된 곳입니다 (예 : 이미지를로드 한 URL 또는 페이지가로드 된 다른 페이지 등). – xinit

+0

죄송합니다. 사용자 에이전트를 의미했습니다. 그리고 당신을 같은 일에 연결 시켰습니다 ... – farnoy

57

browser gem은 Rails에서 브라우저 감지를 위해 특별히 설계되었습니다.

+0

그것이 나를 크게 도와 준 보석에 대해 몰랐습니다! –

+0

은 태블릿 용으로 오늘은 ipad와 android 만 알고 있습니다 – Evan

+0

큰 데이터 앱에서 광범위하게 사용했습니다. 그것은 아주 좋습니다. 봇 (bot)을 제외시키기 위해 약간 수정할 수도 있습니다. 나는 그렇게 할 수있는 능력을 가진 풀 요청을했다고 믿습니다. – rcd