Обнаружение браузера в Javascript --- ОШИБКА? - PullRequest
9 голосов
/ 24 декабря 2010

Это детектор: http://w3schools.com/js/tryit.asp?filename=try_nav_all

В Chrome, Firefox, Safari и Netscape всегда отображается кодовое имя браузера как Mozilla, а имя браузера как Netscape. Разве это не должно меняться в зависимости от браузера?

Вот код и различные выходы, если вам интересно:

КОД:

document.write("Browser CodeName: " + navigator.appCodeName);
document.write("<br /><br />");
document.write("Browser Name: " + navigator.appName);
document.write("<br /><br />");
document.write("Browser Version: " + navigator.appVersion);
document.write("<br /><br />");
document.write("Cookies Enabled: " + navigator.cookieEnabled);
document.write("<br /><br />");
document.write("Platform: " + navigator.platform);
document.write("<br /><br />");
document.write("User-agent header: " + navigator.userAgent);

ВЫХОД ХРОМА:

Browser CodeName: Mozilla

Browser Name: Netscape

Browser Version: 5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10

ВЫХОД ПОЖАРОТОКСА:

Browser CodeName: Mozilla

Browser Name: Netscape

Browser Version: 5.0 (Windows; es-ES)

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 

ВЫХОД САФАРИ:

Browser CodeName: Mozilla

Browser Name: Netscape

Browser Version: 5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4

НЕТСКЕЙП ВЫХОД:

Browser CodeName: Mozilla

Browser Name: Netscape

Browser Version: 5.0 (Windows; en-US)

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax)

Ответы [ 2 ]

11 голосов
/ 24 декабря 2010

Возможно, так и должно быть, это зависит от того, чего они пытаются достичь.

Но это просто демонстрирует, почему браузер обнаружение приобрело дурную славу в пользу функции обнаружение.Код распознавания браузера быстро невероятно .Обнаружение функций, с другой стороны, не зависит от времени.

Например: I может проверить, является ли браузер IE, и, если это так, предположить, что браузер не имеетArray.prototype.indexOf.Но потом приходит IE9 и добавляет его, но, как кружка, я все еще использую свою собственную версию, потому что я думаю, что у IE нет ее.Намного лучше проверить, существует ли он в реализации, на которой я работаю, без особой заботы о том, какой это бренд.И, конечно, функция обнаружения будет работать с браузером, о котором я никогда не слышал;Обнаружение в браузере завершится неудачно и откажется от некоторого совершенно произвольного «по умолчанию».

Иногда это не так просто, как при if (Array.prototype.indexOf), но обычно это возможно.У Юрия Зайцева ( kangax ) есть большой список функций обнаружения функций.

(Примечание: почти 1023 * все браузеры утверждают (на некотором уровне)) что они "Mozilla", потому что некоторые сайты предпочитают браузеры Netscape (да, это было давно) браузерам Microsoft, и для проверки проверяют браузер.)

3 голосов
/ 24 декабря 2010

Во-первых, я обнаружил, что сценарий Quirksmode BrowserDetect является настоящим украшением и, вероятно, будет лучше, чем тот, который вы используете сейчас.

Википедия объясняет , что строки User Agent почти всегда начинаются с "Mozilla":

Неофициальный формат, основанный на вышеизложенном, используемый веб-браузерами, имеет видследует: Mozilla / [версия] ([информация о системе и браузере]) [платформа] ([сведения о платформе]) [расширения].

Но, чтобы объяснить, почему все браузеры претендуют на звание "Mozilla", вам нужно немного вернуться назад к войнам браузеров 1990-х ... From эта статья на webaim.org :

[...] затем появился новый веб-браузер, известный как «Mozilla», сокращенно от «Mosaic Killer», но Mosaic не был удивлен, поэтомупубличное имя было изменено на Netscape, и Netscape назвал себя Mozilla / 1.0 (Win3.1) [...] [...] И Microsoft стала нетерпеливой, и не хотела ждать, пока веб-мастера изучат IE и начнут отправлятьэто кадры, и поэтому Internet Explorer объявил, что он «совместим с Mozilla» и начал выдавать себя за Netscape, и назвал себя Mozilla / 1.22 (совместимый; MSIE 2.0; Windows 95), [...] И Microsoft продала IE с Windows, исделал это лучше, чем Netscape, и первая война браузеров свирепствовала на лице земли.И вот, Netscape был убит, и Microsoft очень радовалась.Но Netscape возродился как Mozilla, и Mozilla создала Gecko и назвала себя Mozilla / 5.0 (Windows; U; Windows NT 5.0; en-US; rv: 1.1) Gecko / 20020826, и Gecko был движком рендеринга, и Gecko был хорош,И Mozilla стала Firefox и назвала себя Mozilla / 5.0 (Windows; U; Windows NT 5.1; sv-SE; rv: 1.7.5) Gecko / 20041108 Firefox / 1.0, и Firefox был очень хорош.И Gecko начал размножаться, и родились другие браузеры, которые использовали его код, и они называли себя Mozilla / 5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv: 1.7.2) Gecko / 20040825 Camino/0.8.1 один и Mozilla / 5.0 (Windows; U; Windows NT 5.1; de; rv: 1.8.1.8) Gecko / 20071008 SeaMonkey / 1.0 другой, каждый претендующий на звание Mozilla, и все они работают на Gecko.[...]

Вы должны прочитать всю статью, она информативна и забавна.Но, как бы то ни было, вам нужно проанализировать строку User Agent, так как они почти все говорят: «Mozilla / что-то »

...