18

레일에서 브라우저 유형 및 해당 버전을 검색하려면 어떻게해야합니까? 특정 브라우저의 버전을 확인하고 사용자가 업그레이드 할 것을 요구하는 것보다 브라우저 버전이 필요한지 확인하고 싶습니다. 아래의 지정된 명령을 사용하지만 표준 패턴을 따르지 않으면이를 사용할 수 없습니다.브라우저 유형 및 해당 버전을 검색하는 방법

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

''HTTP_USER_AGENT ''를 스니핑하는 것은 전통적인 방법입니다. 다른 앱이 코드를 스푸핑하거나 사용자가 스푸핑하도록 브라우저의 서명을 변경하므로 명시 적으로 신뢰하지 않아도됩니다. –

답변

21

그래서 진정 모든 브라우저를 감지 할 수있는 방법이다. 아주 간단하고 목적을 해결할 수 있습니다.

보석 Here 매우 사용하기 쉬운 것을 찾을 수 있습니다.

3

당신이하는 일은 실제로 그것을하는 방법입니다. 이제 사용자 에이전트 정보를 정규 표현식으로 처리하여 Firefox, Chrome 또는 원하는 다른 브라우저 또는 버전에서 일치하는 항목을 찾을 수 있습니다.

+0

@SyedRaza Google은 그 문제를 해결할 수있었습니다. 나는 '이것에 대해 어떻게 생각 하느냐'는 질문에 아무런 문제가 없다는 것을 의미합니다. 그러나 사람들이 당신을 위해 당신의 일을 할 것이라고 이미 알고있는 동안에는 '어떻게'나는 게으르다 고 생각합니다. – Mosselman

+0

브라우저의 최신 버전인지 여부를 감지 할 수있는 방법이 있습니까? 미리 감사드립니다. –

27

참고 : 일부 검색 엔진은 침입의 유형으로보기 (구글 HTTP 사용자 에이전트) 다음을 참조주의

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

또는 파이어 폭스

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

하고이를 확인에 여기에 필요한 것을 모두 얻을 수 있습니다. browser Gem

browsers_detection_gem여기

과브라우저 보석을보십시오 사람

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

useragent 보석이 :이 프론트 엔드 솔루션이지만

<% 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

고마워요. 정확히 내가 뭘 찾고 있었 : D 조 –

0

, 나는 그런 인 flexbox로, 요구되는 특정 기능을 확인하는 것을 선호합니다. Modernizr과 같은 것을 사용할 수도 있고 간단한 자바 스크립트 검사 만 (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' 
} 
관련 문제