Při tvorbě stránek se snažím oddělovat vzhled od obsahu tím, že používám XHTML a CSS. Nedávno jsem ale narazil na jeden problém. Vytvářel jsem stránku, ve které jsem navigační nabídku umisťoval absolutním pozicováním do levého sloupce. Nic by na tom nebylo, kdybych se na stránku nepodíval mobilním telefonem. Zjistil jsem, že navigační menu nikde není.

Testováním jsem dospěl k závěru, že můj mobilní telefon sice podporuje některé vlastnosti CSS, ale ne všechny a asi ne úplně správně. Přivedlo mě to tedy na myšlenku, že kdybych pro mobilní telefony odstranil definici CSS, stránky by se zobrazovaly správně. Zkusil jsem to udělat ručně a bylo to skutečně tak.

Jenže jsem narazil na problém, jak programově zjistit, že se na stránky dívá někdo z mobilního telefonu. Napadlo mě, že by se dal mobilní prohlížeč (prohlížeč v mobilním telefonu) rozpoznat podle výskytu určitého řetězce v identifikaci prohlížeče. Každý prohlížeč se totiž stránce identifikuje určitým řetězcem, který obsahuje různé informace o typu prohlížeče. Tato identifikace se naštěstí dá zjistit jednoduchým skriptem.

Ukázka skriptu pro PHP:

<?php echo $_SERVER[„HTTP_USER_AGENT“]; ?>

Ukázka skriptu pro ASP:

<% Response.Write Request.ServerVariables(„HTTP_USER_AGENT“) %>

Teď už jen zbývalo získat dostatečně velký vzorek identifikací různých druhů prohlížečů (hlavně těch mobilních) a sestavit nějaký řídící řetězec, podle kterého by se daly identifikovat mobilní prohlížeče.

Podařilo se mi na internetu najít seznam, který obsahoval více než pět tisíc různých identifikací prohlížečů, převážně z mobilních telefonů, a na základě tohoto seznamu jsem sestavil řídící řetězec a naprogramoval funkci, která podle testů dokáže na 98,2 % identifikovat prohlížeč z mobilního telefonu. Funkci jsem nazval IsMobile a její kód můžete vidět níže.

Funkce IsMobile pro PHP:

<?php
function IsMobile()
{
  // funkcí ERegI zjistím výskyt některé části řídícího řetězce
  // v řetězci identifikace prohlížeče
  $ret = ERegI(QuoteMeta(„UP.LINK|MIDP|UP.BROWSER|NOKIA|MOT|SEC-„.
  „|WAP|ERICSSON|SAMSUNG|SIE-|PHONE|PANASONIC“.
  „|MITSU|LG|PORTALMMM|BLACKBERRY|SYMBIAN|PHILIPS“.
  „|SENDO|KLONDIKE|SAGEM|MOBILE|ALCATEL|SONY“),
  $_SERVER[„HTTP_USER_AGENT“]);
  // vrácení návratové hodnoty
  return $ret;
};
?>

Funkce IsMobile pro ASP:

<%
Function IsMobile()
‚deklarace proměnné pro regulární výrazy
Dim regEx
 
  ‚vytvoření proměnné pro regulární výrazy
  Set regEx = New RegExp
  ‚nastavení regulárního výrazu (řídící řetězec)
  regEx.Pattern = „UP\.LINK|MIDP|UP\.BROWSER|NOKIA|MOT|SEC-“ _
  & „|WAP|ERICSSON|SAMSUNG|SIE-|PHONE|PANASONIC“ _
  & „|MITSU|LG|PORTALMMM|BLACKBERRY|SYMBIAN|PHILIPS“ _
  & „|SENDO|KLONDIKE|SAGEM|MOBILE|ALCATEL|SONY“
  ‚nastavení nerozlišování velikosti písmen
  regEx.IgnoreCase = True
  ‚spuštění porovnání (vrátí návratovou hodnotu funkce)
  IsMobile = regEx.Test(Request.ServerVariables(„HTTP_USER_AGENT“))
End Function
%>

Jak jsem dospěl k výsledkům?

Nejdříve jsem vytvořil stránku, která používala výše uvedené skripty pro vypsání identifikace prohlížeče, ze které jsem chtěl získávat identifikace mobilních telefonů na základě příspěvků od uživatelů stránek. Ukázalo se, že to není dobrá metoda, a proto mi Dušan Janovský (Yuhů) poskytl seznam osmdesáti šesti identifikací mobilních prohlížečů z LOGu jeho webu, což bylo sice velmi malé množství, ale postačující pro základní analýzu.

Vzhledem k tomu, že způsob získávání identifikačních řetězců se mi zdál nedostatečný (zdlouhavý postup a malá pravděpodobnost získání většího počtu zájemců o účast), napadlo mě, že bych se po identifikacích mobilních prohlížečů mohl poohlédnout na internetu. Podařilo se mi najít seznam, který obsahoval (po odstranění různého smetí) 5 102 záznamů, a ten se mi zdál již dostatečně velký k praktickému použití.

Analýzou tohoto seznamu jsem sestavil nejčastěji se vyskytující řetězce, které jednoznačně identifikovaly mobilní prohlížeče, a sestavil jsem je podle četnosti jejich výskytu do řídícího řetězce, který jsem pak použil v regulárním výrazu ve funkci IsMobile.

Metodika použitá při analýze

Nejprve jsem provedl odhad nejčastěji se vyskytujících řetězců v identifikacích mobilních prohlížečů. Podíval jsem se tedy na identifikace a řetězec, který se na první pohled vyskytoval nejčastěji, jsem použil. Poté jsem počítal četnost výskytu těchto jednotlivých řetězců a kontroloval řádky, které do výsledku nezapadaly. Postupně jsem tak určoval další řetězce, které se daly použít. Postupným počítáním četností výskytu těchto řetězců jsem dospěl až ke konečnému sestavení řídícího řetězce.

Využití funkce IsMobile

Tato funkce může posloužit všem tvůrcům stránek, ať už připravovaných „ručně“ či dynamicky generovaných, kteří nechtějí nebo nemohou udržovat více verzí stránek (pro mobily a desktopy). Funkce se dá použít nejen pro odfiltrování definic CSS, ale v podstatě pro jakoukoli jinou filtraci informací, které se mají nebo nemají zobrazovat při přístupu z mobilního telefonu (například odfiltrování reklamních bannerů a podobně).

Odkazy a zdroje

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět