Почему JavaScript navigator.appName возвращает Netscape для Safari, Firefox и Chrome?
Почему navigator.appName возвращает "Netscape" для Safari, Firefox и Chrome?
Что они должны делать со старым браузером Netscape? Может быть, из-за DOM0?
Ответ 1
Да и это для проблем совместимости, и на них не следует полагаться. MDN говорит: "Это изначально было частью DOM Level 0, но с тех пор было включено в спецификацию HTML5".
КСТАТИ; поэтому это невозможно использовать для обнаружения браузера. Обнаружение браузера - это БЕСПЛАТНАЯ практика, и вы всегда должны избегать ее там, где это возможно. Сделайте обнаружение функции. Но если кто-то настаивает на этом; они должны использовать свойство userAgent.
ОБНОВЛЕНИЕ 1: согласно Изменения совместимости; IE11 теперь также возвращает свойство "Netscape" для navigator.appName, чтобы отразить стандарт HTML5 и сопоставить поведение других браузеров. Также см. Изменения в userAgent string здесь... Подробнее об обнаружении функции здесь...
ОБНОВЛЕНИЕ 2: Microsoft Edge также возвращает "Netscape" для navigator.appName.
Ответ 2
На основании поста Джонни Стенбека:
Это обсуждалось в новостных группах mozilla много лет назад, и было решено что navigator.appName должен вернуть "Netscape" даже в mozilla, поскольку если это будет изменено на каждую страницу в Интернете, которая использует некоторые браузерный нюхательный код (и что ОГРОМНАЯ часть текущей сети) нужно было бы признать мозилла, и этого просто не произойдет, и нет никаких оснований делать это либо с mozilla == netscape == mozilla, поскольку разработчики контента согласны.
Начиная с IE11, Explorer также будет возвращать "Netscape" при вызове navigator.appName;
Ответ 4
Теперь можно просто найти навигатор.userAgent для определения браузера для IE 11 и найти его механизм компоновки. По моему опыту, это работает довольно хорошо. Смотрите этот пост.