수색…


소개

브라우저는 진화하면서 더 많은 기능을 Javascript에 제공했습니다. 그러나 종종 이러한 기능은 모든 브라우저에서 사용할 수있는 것은 아닙니다. 때로는 하나의 브라우저에서 사용할 수 있지만 다른 브라우저에서 출시 될 수는 있습니다. 다른 경우 이러한 기능은 브라우저마다 다르게 구현됩니다. 브라우저 검색은 개발하는 응용 프로그램이 서로 다른 브라우저 및 장치에서 원활하게 실행되도록 보장하는 데 중요합니다.

비고

가능한 경우 기능 감지를 사용하십시오.

브라우저 검색을 사용하는 몇 가지 이유가 있습니다 (예 : 브라우저 플러그인을 설치하거나 캐시를 지우는 방법에 대한 사용자 지침 제공). 일반적으로 기능 감지는 모범 사례로 간주됩니다. 브라우저 검색을 사용하는 경우 브라우저가 절대적으로 구식인지 확인하십시오.

Modernizr 은 인기있는 가벼운 JavaScript 라이브러리로서 기능을 쉽게 감지합니다.

피쳐 검출 방법

이 메소드는 브라우저 특정 사항의 존재 여부를 찾습니다. 이것은 스푸핑하기가 더 어려울지라도 미래 보장 될 수는 없습니다.

// Opera 8.0+
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;

// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';
    
// At least Safari 3+: "[object HTMLElementConstructor]"
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;

// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;

// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;

// Chrome 1+
var isChrome = !!window.chrome && !!window.chrome.webstore;

// Blink engine detection
var isBlink = (isChrome || isOpera) && !!window.CSS;

성공적으로 테스트되었습니다 :

  • Firefox 0.8 - 44
  • Chrome 1.0 - 48
  • Opera 8.0 - 34
  • Safari 3.0 - 9.0.3
  • IE 6 - 11
  • 가장자리 - 20-25

Rob W의 신용

라이브러리 메소드

좀 더 쉬운 접근법은 기존의 JavaScript 라이브러리를 사용하는 것입니다. 이는 브라우저 탐지가 올바른지 보장하기가 까다로울 수 있기 때문에 가능한 해결책이 있으면 사용할 수있는 솔루션을 사용하는 것이 좋습니다.

인기있는 브라우저 감지 라이브러리는 Bowser 입니다.

사용 예 :

if (bowser.msie && bowser.version >= 6) {
    alert('IE version 6 or newer');
}
else if (bowser.firefox) {
    alert('Firefox');
}    
else if (bowser.chrome) {
    alert('Chrome');
}
else if (bowser.safari) {
    alert('Safari');
}
else if (bowser.iphone || bowser.android) {
    alert('Iphone or Android');
}

사용자 에이전트 탐지

이 메소드는 사용자 에이전트를 가져 와서 브라우저를 찾기 위해 구문 분석합니다. 브라우저 이름과 버전은 정규 표현식을 통해 사용자 에이전트에서 추출됩니다. 이 두 가지를 바탕으로 <browser name> <version> 이 반환됩니다.

사용자 에이전트 일치 코드 다음의 네 조건 블록은 다른 브라우저의 사용자 에이전트에서 차이점을 설명하기위한 것입니다. 예를 들어 오페라의 경우 Chrome 렌더링 엔진을 사용하므로 해당 부분을 무시하는 추가 단계가 있습니다.

이 방법은 사용자가 쉽게 스푸핑 할 수 있습니다.

navigator.sayswho= (function(){
    var ua= navigator.userAgent, tem,
    M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if(/trident/i.test(M[1])){
        tem=  /\brv[ :]+(\d+)/g.exec(ua) || [];
        return 'IE '+(tem[1] || '');
    }
    if(M[1]=== 'Chrome'){
        tem= ua.match(/\b(OPR|Edge)\/(\d+)/);
        if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
    }
    M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
    return M.join(' ');
})();

크레딧에 대한 크레딧



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow