Вход

Просмотр полной версии : Проблема с определением userAgent


lamer
21.03.2012, 17:04
Здравствуйте, есть скрипт который определяет браузер и исходя из этого выдает алерт.


<html>

<head>

</head>

<body>
<script>
if (navigator.userAgent.toLowerCase().indexOf('msie') != -1 && navigator.userAgent.toLowerCase().indexOf('opera') == -1 && navigator.userAgent.toLowerCase().indexOf('webtv') == -1) {
alert('IE');
}
if (navigator.userAgent.toLowerCase().indexOf('gecko' ) != -1) {
alert('FF');
}
</script>
</body>

</html>


Проблема в том что и в FireFox и в Chrome есть gecko.
В итоге при запуске в Chrome вылетает алерт alert('FF');

Кто сталкивался, как бороться ?

dmitriymar
21.03.2012, 17:22
http://javascript.ru/forum/project/24996-opredelenie-tipa-brauzera-i-versii-po-vozmozhnostyam-brauzera-dvizhka.html

lamer
21.03.2012, 18:24
http://javascript.ru/forum/project/24996-opredelenie-tipa-brauzera-i-versii-po-vozmozhnostyam-brauzera-dvizhka.html

Спасибо, но у меня что то Оперу не определяет.


<html>

<head>

</head>

<body>
<script>
window.onload = function() {
hasIE = /*@cc_on true; @*/false;
if (hasIE > 0) {alert('IE'); return false}
hasOpera = !!window.opera;
if (hasOpera > 0) {alert('Opera'); return false}
hasChrome = !!window.chrome;
if (hasChrome > 0) {alert('Chrome'); return false}
hasFireFox = !!window.sidebar;
if (hasFireFox > 0) {alert('FireFox'); return false}
hasSafari = !window.external && !hasOpera;
if (hasSafari > 0) {alert('Safari'); return false}
}
</script>
</body>

</html>


Может я не правильно проверку сделал ?

devote
21.03.2012, 18:48
Может я не правильно проверку сделал ?
браузер нужно определять не по версиям и типу, а по его возможностям. Не забывайте о том что браузеры обновляются и то чего в них нет сейчас может появиться в новой версии.

dmitriymar
21.03.2012, 19:17
Может я не правильно проверку сделал ?
определяет оперу

lamer
21.03.2012, 19:38
браузер нужно определять не по версиям и типу, а по его возможностям. Не забывайте о том что браузеры обновляются и то чего в них нет сейчас может появиться в новой версии.

Скажите в двух словах как вы нашли эти возможности в браузерах ?
Может какая то хитрость есть или ещё что то, сорри если глупый вопрос задаю, я не пока не очень силен в JS.

определяет оперу

Да действительно, видимо не тот файл загрузил.

lamer
21.03.2012, 20:34
Столкнулся с непоняткой в IE, вот код:

<html>

<head>

</head>

<body>
<script>
hasIE = /*@cc_on true; @*/false;
if (hasIE > 0) {alert('IE');}
hasFireFox = !!window.sidebar;
if (hasFireFox > 0) {alert('FF');}
else {alert('other');}
</script>
</body>

</html>


Нужно чтоб на всех остальных браузеров кроме IE/FF скрипт выдавал alert('other');
Он же в IE работает не понятно, сперва выдает alert('IE'); а затем alert('other');
В чем может быть проблема ? Это что особенность IE ?

T-sh
21.03.2012, 20:48
Столкнулся с непоняткой в IE, вот код:

<html>

<head>

</head>

<body>
<script>
hasIE = /*@cc_on true; @*/false;
if (hasIE > 0) {alert('IE');}
hasFireFox = !!window.sidebar;
if (hasFireFox > 0) {alert('FF');}
else {alert('other');}
</script>
</body>

</html>


Нужно чтоб на всех остальных браузеров кроме IE/FF скрипт выдавал alert('other');
Он же в IE работает не понятно, сперва выдает alert('IE'); а затем alert('other');
В чем может быть проблема ? Это что особенность IE ?

правильно и выдает :) у вас два условных блока:

1. if (hasIE > 0) {alert('IE');}

который выполняется и IE и исполнение скрипта проходит дальше, где второй блок:

2. if (hasFireFox > 0) {alert('FF');}
else {alert('other');}

и он тоже исполняется :)

используйте else if

lamer
21.03.2012, 21:00
T-sh, не совсем понял что вы имеете введу, как использовать "else if" ? Можно пример ?

Но то что вы писали про условные блоки натолкнуло на мысль сделать так:


<html>

<head>

</head>

<body>
<script>
window.onload = function() {
hasIE = /*@cc_on true; @*/false;
if (hasIE > 0) {alert('IE'); return false}
hasFireFox = !!window.sidebar;
if (hasFireFox > 0) {alert('FF'); return false}
else {alert('other');}
}
</script>
</body>

</html>


Это правильно написано с точки зрения синтаксиса ?
Или лучше не переписать так как вы говорили используя "else if" ?

T-sh
21.03.2012, 21:07
<script>
hasIE = /*@cc_on true; @*/false;
hasFireFox = !!window.sidebar;
if (hasIE > 0) {
alert('IE');
}
else {
if (hasFireFox > 0) {
alert('FF');
}
else {
alert('other');
}
}
</script>

lamer
21.03.2012, 21:17
T-sh, Спасибо за помощь.