Обнаружение возможностей
Возможность обнаружить конкретный браузер перед написанием кода. Например, сценарий, возможно, должен обнаружить существование первоначального взноса за функцию, прежде чем вызывать ее. Этот метод обнаружения освобождает разработчиков от рассмотрения конкретных типов браузеров и версий, что позволяет им сосредоточиться на том, существуют ли соответствующие возможности. Обнаружение возможностей не может точно обнаружить конкретные браузеры и версии.
Обнаружение причуды
Причуды на самом деле являются ошибками в реализациях браузера. Например, в ранних Webkits была причуда, то есть он возвращает скрытые атрибуты в цикле For-In. Обнаружение причуды обычно включает в себя запуск куска кода, а затем определение того, есть ли у браузера причуду. Потому что обнаружение причуды не может точно обнаружить конкретные браузеры и версии.
Обнаружение пользовательского агента
Определите браузер, обнаружив строку агента пользователя. Строка пользовательского агента содержит большое количество информации, связанной с браузером, включая браузер, платформу, операционную систему и версию браузера. Строки пользователя имеют значительную историю разработки. В течение этого периода представление поставщика браузеров всегда добавляет некоторую обманчивую информацию в строку пользователя и обманывает веб -сайт в подробности, что его собственный браузер является еще одним браузером. Обнаружение пользовательского агента требует особых навыков, особенно помните, что Opera скрывает свои строки пользователя. Несмотря на это, двигатель рендеринга, используемый браузером и платформой, используемой мобильным устройством и игровой системой, все еще может быть обнаружен через строку пользователя.
Во время каждого HTTP -запроса строка агента пользователя отправляется в качестве заголовка ответа, а строку можно получить через свойство navigator.useragent в JavaScript. На стороне сервера это обычная и широко распространенная практика для определения браузера, используемого путем обнаружения строки пользовательского агента. На стороне клиента обнаружение пользовательского агента, как правило, рассматривается как последнее средство, с приоритетом после обнаружения возможностей и обнаружения причуды.
var client = function () {// рендеринг двигателя var ingine = {ie: 0, gecko: 0, webkit: 0, khtml: 0, opera: 0, // полная версия номер версии: null}; // Браузер VAR Browser = {// Main Browser 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 = window.opera.version (); Engine.opera = browser.opera = parsefloat (Engine.ver); } else if (/appleWebkit///(/s+)/.test(ua)) {Engine.ver = regexp ["$ 1"]; Engine.webkit = parsefloat (Engine.ver); // Определите, является ли это Chrome или Safari 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 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///NTuardy •/.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 (/firefox///(s+)/.test(ua)) {browser.ver = regexp ["$ 1"]; browser.firefox = parsefloat (browser.ver); }} else if (/msie ([^;]+)/. test (ua)) {Engine.ver = browser.ver = regexp ["$ 1"]; Engine.ie = browser.ie = parsefloat (Engine.ver); } // Обнаружение браузера Browser.ie = Engine.ie; Browser.opera = Engine.opera; // возвращать эти объекты return {engine: engine, browser: browser}} (); console.log (client.engine); console.log (client.browser);Tangram обнаруживает исходный код браузера
/*** объявить пакет Baidu*/var baidu = baidu || {версия: "1-3-2"}; // meizz 20100513 Обновление GUID до /X06BAIDU.GUID = "$ BAIDU $"; // Предлагаем GUID для предотвращения модификации окна [Undefined] 20100504 Berg/*** Meizz 2010/02/04* Домен верхнего уровня Baidu может быть уклонен закрытием, а следующий объект требуется, когда требуется уникальная информация Page-Level Уникальная информация*/окна. окно [baidu.guid] || {};/*** Объявить пакет Baidu.browser*/baidu.browser = baidu.browser || {};/** * Определите, является ли это isgecko */baidu.browser.isgecko = /gecko/i.test(navigator.useragent) &&!/Как гекко/i.test (navigator.useragent);/** * Определить, является ли это ISwebkit */baid. /webkit/i.test(navigator.useragent) ;/*** определить, является ли это стандартным режимом*/baidu.browser.issstrict = document.compatmode == "css1compat";/*** определить, является ли это сафари браузер*/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 Brower*/if (/Chrome//(/d+/./d)/i.test(navigator.useragent)) {baidu.browser.chrome = parsefloat (regexp ['/x241']);}/*** Определить, является ли это браузером IE*/if (/msie (/d+/./d). baidu.ie = baidu.browser.ie = document.documentmode || parsefloat (regexp ['/x241']);}/*** определить, является ли это браузером Firefox*/if (/firefox///(/d+/./d)/i.test(navigator.useragent)) {baidu.browser.firefox = parsefloat (regexp ['/x241']; // '/x241' - это восьмиугольная нотация '/x24' соответствующий символ '$', так что '/x241' эквивалентен '$ 1'}