V dalτím díle naτeho seriálu o programování ASP stránek vám Chip ukáºe dva zpàsoby, jak lze zjistit typ a vlastnosti prohlíºeƒe WWW stránek. Vaτe stránky budou τité na míru prohlíºeƒi a ƒtená²i vás za to budou mít rádi.
Programování ASP stránek - 2. díl
Pokud jiº máte s vytvá²ením stránek dlouhodob╪jτí zkuτenosti, moºná si jeτt╪ vzpomínáte na dobu, kdy v╪tτina prohlíºeƒà zobrazovala WWW stránky zcela identicky. S tím, jak se jednotlivé prohlíºeƒe zdokonalovaly, se tato identita zaƒala postupn╪ vytrácet. N╪které firmy si totiº do sv∞ch prohlíºeƒà p²idaly podporu vlastních HTML tagà a jaksi tiτe poƒítaly s tím, ºe i jejich nové p²íkazy budou zahrnuty do nové specifikace HTML jazyka, pravideln╪ korigované a schvalované konsorciem W3C. Klasick∞m p²íkladem jsou dva z dnes nejpouºívan╪jτích prohlíºeƒà - Microsoft Internet Explorer a Netscape Navigator. Oba obsahují podporu ²ady nov∞ch HTML p²íkazà a zajímav∞ch technologií (nap². ActiveX, Javy a dalτích), to vτe vτak za cenu ƒásteƒné ztráty vzájemné kompatibility p²i zobrazování stránek. Technické vymoºenosti, které rozvoj webu p²inesl, tak paradoxn╪ "odskákali" v∞vojá²i a designé²i. Pokud cht╪jí vytvo²it WWW prezentaci na skuteƒn╪ profesionální úrovni, musí se p²izpàsobit uºivatelàm internetu a naprogramovat stránky tak, aby vypadaly pokud moºno stejn╪ v obou typech prohlíºeƒà. D╪lají to tak, ºe vytvo²í zvláτtní verzi WWW stránky speciáln╪ pro kaºd∞ typ prohlíºeƒe, p²iƒemº vyuºijí moºností a funkcí, které jim dan∞ prohlíºeƒ nabízí.
Protoºe dnes pouºívá p²eváºná ƒást uºivatelà internetu pouze dva typy prohlíºeƒà - Netscape Navigator nebo Internet Explorer, vznikají WWW stránky hned ve dvou provedeních. Jedin∞ problém tvàrce prezentace spoƒívá v rozliτení uºivatelà podle typu prohlíºeƒe, kter∞ pouºívají, a zaslání odpovídající verze WWW stránky. Tento problém nelze ²eτit klasick∞mi HTML p²íkazy a je t²eba zvolit metodu, pomocí které lze bezpeƒn╪ identifikovat typ prohlíºeƒe, jímº uºivatel internetu práv╪ p²istupuje na danou stránku. Jedním z pom╪rn╪ jednoduch∞ch ²eτení je rozliτování pomocí programov∞ch skriptà umíst╪n∞ch uvnit² aktivních ASP stránek.
Prohlíºeƒi, p²iznej barvu!
Pro ²eτení naτeho problému vyuºijeme jednu z p╪ti základních programov∞ch komponent (server-side ActiveX Controls), která se jmenuje Browser Capabilities Component, a do své ASP stránky zakomponujeme skript obsahující volání této komponenty. Zde je:
<% Set bc = Server.CreateObject
("MSWC.BrowserType") %>
Cel∞ proces identifikace typu prohlíºeƒe potom probíhá následujícím zpàsobem: Uºivatel klepne myτí na odkaz nebo p²ímo napíτe adresu naτí WWW stránky. Tím poτle na server poºadavek na zaslání naτí WWW stránky. Zároveσ s dotazem se na server poτle speciální textov∞ kód (²íkejme mu sekvence), kter∞ identifikuje typ pouºívaného prohlíºeƒe (nap². u Internet Exploreru jde o sekvenci Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)). P²i kompilaci ASP stránky dojde k volání jiº zmiσované programové komponenty, která vyhodnotí získanou sekvenci znakà a do strukturované prom╪nné bc p²i²adí n╪kolik hodnot obsahujících informace o typu, verzi a vlastnostech prohlíºeƒe WWW stránek ºádajícího o zaslání aktuální stránky. Strukturu t╪chto informací naleznete v tabulce, v∞stupy ASP stránky jsou prezentovány na obrázku.
Jak vidíte, komponenta zjistí u prohlíºeƒe nejenom jeho typ (Browser), ale také celou ²adu dalτích vlastností. Zní to moºná aº p²ehnan╪, ale p²i tvorb╪ WWW stránek vyuºijete i prom╪nnou Version. U n╪kter∞ch prohlíºeƒà totiº dochází k menτím rozdílnostem v zobrazování stránek dokonce i mezi ràzn∞mi verzemi (nap². u IE mezi verzí 3.01 a 4.0). S prom╪nnou Tables si v╪tτinou nemusíte d╪lat starosti, nebo£ ²azení dat a textà do tabulek podporují dnes jiº prakticky vτechny prohlíºeƒe. Podobn╪ je to v p²ípad╪ hodnoty prom╪nné Frames, rozƒlenit stránku do rámeƒkà umí p²eváºná ƒást prohlíºeƒà. Z posledních t²í prom╪nn∞ch je zajímavá aº prom╪nná JScript, jejíº kladná hodnota vypovídá o tom, ºe prohlíºeƒ dokáºe pracovat s JavaScriptem. Ten se v∞born╪ hodí pro opravování vstupních údajà p²i vyplσování formulá²à a povíme si o n╪m více v n╪kterém z dalτích dílà tohoto seriálu.
Nic ovτem není dokonalé a také Browser Capabilities Component má své "muchy", jak se u nás doma ²íká. Pro anal∞zu sekvence znakà zasílané prohlíºeƒem pouºívá speciální soubor browscap.ini, ve kterém jsou uloºeny vτechny doposud známé sekvence a jim odpovídající typy prohlíºeƒà. Komponenta tudíº nic nezjiτ£uje, pouze systematicky porovnává sekvence znakà v souboru browscap.ini tak dlouho, dokud nenarazí na odpovídající prohlíºeƒ. Problém nastává v situaci, kdy dané sekvenci neodpovídá v souboru ºádn∞ prohlíºeƒ. V tom p²ípad╪ si neví komponenta rady a do prom╪nn∞ch Browser a Version p²i²adí hodnotu Unknown. K tomuto stavu dochází ƒasto v p²ípad╪, ºe se na internetu objeví nové verze prohlíºeƒà, které logicky nemohou b∞t zahrnuty v souboru browscap.ini, a komponenta je proto neumí rozeznat. Proto doporuƒujeme soubor browscap.ini pravideln╪ aktualizovat o nové verze prohlíºeƒà nebo - jeτt╪ lépe - stáhnout si z internetu novou verzi tohoto souboru a p²epsat jí starou verzi. Ta se na systému Windows NT nachází v adresá²i \winnt\system32\initsrv\ASP\Cmpnts (pro MS IIS ve verzi 3.0) nebo p²ímo v adresá²i \winnt\system32\initsrv, pokud pouºíváte MS IIS 4.0. Nejnov╪jτí soubor browscap.ini jsme jiº pro vás stáhli z internetu a naleznete jej na Chip CD v tomto ƒísle.
Existuje jeτt╪ dalτí zpàsob, jak s pomocí ASP urƒit typ pouºitého prohlíºeƒe. Pokud chcete mít skuteƒn╪ jistotu rozliτení jednotliv∞ch prohlíºeƒà a postaƒí vám, kdyº budete znát pouze jeho jméno, lze vyjít z p²ímé anal∞zy sekvence zasílané p²i poºadavku prohlíºeƒem klienta (nap². Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)). Bliºτím rozborem zjistíte, ºe text obsahuje jméno prohlíºeƒe a typ operaƒního systému, na kterém b╪ºí. V tomto p²ípad╪ se jedná o Microsoft Internet Explorer ve verzi 4.01 b╪ºícím na Windows NT. Do ASP stránky lze rozpoznávání zabudovat ve dvou ²ádcích. V prvním ²ádku naƒteme do prom╪nné Agent sekvenci zasílanou prohlíºeƒem a na druhém ²ádku ji pomocí funkce InStr zanalyzujeme. Jestliºe nalezneme v sekvenci ²et╪zec znakà MSIE, povaºujeme prohlíºeƒ za Internet Explorer a zobrazíme stránku optimalizovanou práv╪ pro n╪j. Zde je v∞pis zdrojového kódu skriptu:
zobraz stránku optimalizovanou pro Internet Explorer
<% Else %>
zobraz stránku optimalizovanou pro ostatní prohlíºeƒe (typicky Netscape Navigator)
<% End If %>
Tento zpàsob identifikace má jednu v∞hodu. Nemusíme volat komponentu Browser Capabilities Component - tím mírn╪ odlehƒíme zát╪ºi serveru, a cel∞ proces by se tak m╪l teoreticky zrychlit. Analogicky màºeme zapsat tento rozhodovací algoritmus také pro p²ípad, kdy pouºíváme k identifikaci prohlíºeƒe jiº zmiσovanou komponentu.
<% Set bc = Server.CreateObject ("MSWC.BrowserType") %>
<% If bc.Browser = "IE" Then %>
zobraz stránku optimalizovanou pro Internet Explorer
<% Else %>
zobraz stránku optimalizovanou pro ostatní prohlíºeƒe (typicky Netscape Navigator)
<% End If %>
V∞hodou je v tomto p²ípad╪ moºnost vyuºití dalτích vlastností prohlíºeƒe zjiτt╪n∞ch komponentou.
Záv╪rem
Vτechny programové skripty popsané v tomto ƒlánku naleznete na Chip CD v rubrice "Zkuste si sami" pod názvem ASP. Nemusíte je tak pracn╪ p²episovat do poƒítaƒe a odla╘ovat chyby vzniklé necht╪n∞m p²eklepem. Ve stejném adresá²i najdete také poslední aktualizovan∞ soubor browscap.ini. Tolik tedy k identifikaci typu prohlíºeƒe pouºívaného klientem. V dalτím díle naτeho seriálu se podíváme na moºnosti práce ASP stránek s databázemi a ukáºeme si zpàsoby posílání parametrà mezi jednotliv∞mi stránkami.