Autor Zpráva
Tomsik
Profil *
Ahoj, řeším problém... detekuji prohlížeč a na základě detekce podstčím jiný kód...

function detek(){
if (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) <= 8)
{
alert("POUZE IE 8 a starsi");
}
else
{
alert("OSTATNI PROHLIZECE");
};
}


Muj cil je ten, ze potrebuji aby bylo rozpoznano zda se jedna o IE 8 a starší verze a ostatní
Uvedeny kód, mi ale IE 9 nevyhodnotí jako ostatní. Díky za radu
Joker
Profil
Tomsik:
detekuji prohlížeč a na základě detekce podstčím jiný kód
To je obvykle špatný přístup.

Za prvé mi přijde divné už to dělení na skupiny. Řekl bych, že třeba IE8 má víc společného s Firefoxem 3.x než třeba s IE6. Stejnětak IE9 má víc společného s IE8 než s Netscape Navigatorem 4.
Za druhé bych nerozlišoval prohlížeče Javascriptem. Co lidi bez JS?
Za třetí, zejména v JS, je obvykle nesmysl rozlišovat prohlížeče. Opravdu chcete návštěvníky dělit podle názvu prohlížeče? Nebo spíš podle technologií podporovaných tím prohlížečem?
Tomsik
Profil *
Joker:
Věřím, že je to obvykle špatný přístup, ale v mém případě to je optimální řešení.

1. vše jsem otestoval a mám problém pouze u IE 8 a starší, v ostatních prohlížečích problém není.. v Firefoxu ani Safari.
2. mají prostě smůlu, respektive kód který jim opět podstrčím je stejně JS, takže nemá smysl k ověřování využívat něco jiného než JS.
Chamurappi
Profil
Reaguji na Tomsika:
mám problém pouze u IE 8 a starší, v ostatních prohlížečích problém není
Ale ten problém není v prohlížeči, ale v (ne)podpoře něčeho konkrétního, nebo v nějakém jiném konkrétním jevu, který nemusí být nutně závislý na konkrétním prohlížeči, tak proč netestuješ to, s čím je problém? Pomohlo by upřesnění, o jaký problém jde.
Tomsik
Profil *
Chamurappi:
Jasně, jde o efekt fadeIN a fadeOut použitý na DIVu, chci proto pro IE 8 a starší tento efekt úplně vypustit.
Kdyby se jednalo o IE6, tak už to neřeším, ale IE 8 je ještě "čerstvý" prohlížeč.

díky
margin
Profil *
Paradoxní na tom je, že IE4 byl první prohlížeč, ve kterém šlo efekt fadeIN a fadeOut zprovoznit. Za tu dobu, co se marně snažíš omezit uživatele starších explorerů, jsi mohl mít řešení fungující napříč dnes běžně používanými prohlížeči.
Tomsik
Profil *
margin:
A jaké je to řešení?
Chamurappi
Profil
Reaguji na Tomsika:
Neznáme tvůj problém. Měnění průhlednosti v Exploreru běžně funguje celkem správně. Pokud u tebe ne, nevíme proč, dodej ukázku.
gerrycz
Profil
Právě jsem řešil stejnou věc a upravil jsem podmínku následovně:

if (navigator.appName == "Microsoft Internet Explorer" && navigator.appVersion.substring(22, 23) <= 8) // nebo pro všechny IE (document.all)


Protože navigator.appVersion ukazuje i u IE 9 toto: 5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; BRI/2; FDM), proto není vhodné používat parseInt(navigator.appVersion), a proto jsem vyříznul z appVersion číslo co je uvedeno až u MSIE 9.0,
Chamurappi
Profil
Reaguji na gerryhocz:
Dost krátkozraké. Víš, co bude na dvacátém druhém znaku v Internet Exploreru 10? Pravděpodobně jednička.
Viz [#4]. Příčinou problému nikdy není verze, není důvod ji testovat.
gerrycz
Profil
Reaguji na Chamurappiho:

O dopředné kompatibilitě jsem popravdě nepřemýšlel. Chápu připomínku o zbytečnosti testování verzí prohlížečů, ale zatím to lépe vyřešit neumím.

Podmínku by, tedy kvůli budoucí kompatibilitě, bylo nejlepší upravit takto:

if (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion.substring(22, 24)) <= 8)


Vyříznout z appVersion dvě čísla co budou uvedena až u MSIE 10.0 a kvůli zatím nižším verzím zaokrouhlovat parseInt() (MSIE 9.0)...

Ovšem legrace by byla, kdyby se v MS rozhodli používat místo desítky římskou X (jako třeba Corel X4, nebo Adobe CS5) :-) .
_es
Profil
gerrycz:
zatím to lépe vyřešit neumím
Čo je to „to“?
Joker
Profil
gerrycz:
V tomto vláknu už počtvrté: Ta metoda je nesmyslná jako celek.
Přesně takové idiotské kontroly vedly k tomu, že minimálně v Opera a Firefox mají možnost tyhle informace „falšovat“ a přesně takové idiotské kontroly vedly k tomu, že Opera 10+ má v useragentu a navigator.appVersion verzi „9.80“

Stránku většinou nezajímá obchodní název prohlížeče. Obvykle ji zajímá, jestli prohlížeč podporuje určité technologie.
V tom případě:
Správné řešení: Zeptat se prohlížeče, zda podporuje technologie které potřebuji.
Zcestné řešení: Udělat si seznam všech prohlížečů světa a dumat jakou stránku kdo dostane.
Šéva
Profil
Zdravím
pomocí uvedeného JS si kontroluji verzi IE,ale když si do alertu dám parseInt(navigator.appVersion.substring(22, 24)) tak mi to pod IE 7,8 i 9 vypisuje 7... jak to tedy má správně být?
Marek88
Profil
Šéva:
jak to tedy má správně být?

Joker [#13]:
Správné řešení: Zeptat se prohlížeče, zda podporuje technologie které potřebuji.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0