기능 감지
코드를 작성하기 전에 특정 브라우저를 감지하는 기능. 예를 들어, 스크립트는 기능을 호출하기 전에 함수에 대한 계약금의 존재를 감지해야 할 수도 있습니다. 이 감지 방법은 개발자가 특정 브라우저 유형 및 버전을 고려하지 않아 해당 기능이 존재하는지 여부에 집중할 수 있습니다. 기능 감지는 특정 브라우저 및 버전을 정확하게 감지 할 수 없습니다.
Quirk 탐지
Quirks는 실제로 브라우저 구현의 버그입니다. 예를 들어, 초기 WebKits에는 기발한 것이있었습니다. 즉, For-In Loop에 숨겨진 속성을 반환 할 것입니다. Quirk Detection에는 일반적으로 코드 조각을 실행 한 다음 브라우저에 Quirk가 있는지 결정하는 것이 포함됩니다. Quirk 감지는 특정 브라우저 및 버전을 정확하게 감지 할 수 없기 때문입니다.
사용자 에이전트 감지
사용자 에이전트 문자열을 감지하여 브라우저를 식별하십시오. 사용자 에이전트 문자열에는 브라우저, 플랫폼, 운영 체제 및 브라우저 버전을 포함한 많은 브라우저 관련 정보가 포함되어 있습니다. 사용자 에이전트 문자열에는 상당한 개발 기록이 있습니다. 이 기간 동안 브라우저 제공 업체 뷰는 항상 사용자 에이전트 문자열에 일부기만 정보를 추가하고 웹 사이트가 다른 브라우저가 다른 브라우저입니다. 사용자 에이전트 감지에는 특별한 기술이 필요합니다. 특히 Opera가 사용자 에이전트 문자열을 숨 깁니다. 그럼에도 불구하고 브라우저에서 사용하는 렌더링 엔진과 모바일 장치 및 게임 시스템에서 사용하는 플랫폼은 여전히 사용자 에이전트 문자열을 통해 감지 할 수 있습니다.
각 HTTP 요청 중에 사용자 에이전트 문자열은 응답 헤더로 전송되며 Navigator.useragent 속성을 통해 문자열에 액세스 할 수 있습니다. 서버 측에서 사용자 에이전트 문자열을 감지하여 사용되는 브라우저를 결정하는 것이 일반적이고 널리 허용되는 관행입니다. 클라이언트 측에서 사용자 에이전트 탐지는 일반적으로 최후의 수단으로 간주되며, 기능 감지 및 퀴크 감지에 따라 우선 순위가 있습니다.
var client = function () {// 렌더링 엔진 Engine = {IE : 0, Gecko : 0, WebKit : 0, Khtml : 0, Opera : 0, // 정식 버전 번호 VER : NULL}; // 브라우저 var 브라우저 = {// 메인 브라우저 IE : 0, Firefox : 0, Safari : 0, Konq : 0, Opera : 0, Chrome : 0, // 특정 버전 번호 Ver : NULL}; // 렌더링 엔진 및 브라우저 탐지 var ua = navigator.useragent; if (window.opera) {engine.ver = browser.ver = wind Engine.opera = browser.opera = parsefloat (Engine.ver); } else if (/aptlewebkit//(/s+)/test(ua)) {engine.ver = regexp [ "$ 1"]; Engine.webkit = parsefloat (Engine.ver); // if if (/chrome/(/s+)/.test(ua)) {browser.ver = regexp [ "$ 1"]; Browser.chrome = parsefloat (engine.ver); } else if (/version/(s+)/.test(ua)) {browser.ver = regexp [ "$ 1"]; Browser.safari = parsefloat (browser.ver); } else {// 대략 버전 번호 var var safariversion = 1을 결정합니다. if (Engine.WebKit <100) {Safariversion = 1; } else if (Engine.WebKit <312) {Safariversion = 1.2; } else if (Engine.WebKit <412) {Safariversion = 1.3; } else {Safariversion = 2; } browser.safari = browser.ver = SafaRiversion; }} else if (/khtml/(s+)/.test(UA) ||/Konqueror/(..............9]/)/test (ua))) {engine.ver = browser.ver = regexp [ "$ 1"]; Engine.khtml = Browser.kong = parsefloat (Engine.ver); } else if (/rv : ([^/)]+)/) gecko /// d {8}/. test (ua)) {engine.ver = regexp [ "$ 1"]; Engine.Gecko = parsefloat (Engine.ver); // (/firefox/) If If If If If If인지 확인하십시오. Browser.firefox = parsefloat (browser.ver); }} else if (/msie ([^;]+)/. test (ua)) {engine.ver = browser.ver = regexp [ "$ 1"]; Engine.ie = browser.ie = parsefloat (Engine.ver); } // 브라우저 브라우저 감지 .ie = engine.ie; Browser.opera = Engine.opera; //이 객체를 반환합니다 {엔진 : 엔진, 브라우저 : 브라우저} (); console.log (client.engine); console.log (client.browser);Tangram은 브라우저 소스 코드를 감지합니다
/*** Baidu 패키지 선언*/var baidu = baidu || {버전 : "1-3-2"}; // Meizz 20100513 업그레이드 GUDE는 /x06Baidu.guid = "$ baidu $"에 가이드를 업그레이드합니다. // 창의 수정을 방지하기위한 GUID를 제안합니다. 창 [baidu.guid] || {};/*** Baidu.browser 패키지 선언*/baidu.browser = baidu.browser || {};/** * isgecko */baidu.browser.isgecko =/gecko/i.test(navigator.useragent) &&!/like gecko/i.test (navigator.useragent) /webkit/i.test(navigator.useragent) ;/*** 표준 모드인지 결정*/baidu.browser.isstrict = document.compatmode == "css1compat";/*** 그것이 Safari Browser*/if인지 결정하십시오. (/(/d+/./d)(/./d) ?/s+safari/i.test(navigator.useragent) &&! /chrome/i.test (navigator.useragent))) {baidu.browser.safari = parsefloat (regexp [/x241 '); 브라우저*/if (/opera//(/d+/./d)/i.test(navigator.useragent)) {baidu.browser.opera = parsefloat (regexp [ '/x241']);}/***Chrome 브라우저인지 결정*/if (/chrome/(/d+/./d)/i.test(navigator.useragent))) {baidu.browser.chrome = parsefloat (regexp [ '/x241']);}/**** IE 브라우저*/if (/msie (/x241 ')) baidu.ie = baidu.browser.ie = document.documentmode || parsefloat (regexp [ '/x241']);}/*** 그것이 Firefox 브라우저*/if (/firefox/ (/firefox/(/d+/./d)/i.test(navigator.useragent))) {baidu.browser.firefox = parsefloat (regexp [/x241]); // '/x241'은 옥탈 표기법 '/x24'해당 문자 '$'이므로 '/x241'은 '$ 1'}과 같습니다.