Autor: Paweł Rajewski

Od wersji 5 Internet Explorer oferuje ciekawe rozwiązanie, jakim są komentarze warunkowe (conditional comments). Niby „komentarz jaki jest każdy widzi”, ale… Okazuje się, że nawet ten prosty tag można udoskonalić i zmienić w użyteczne narzędzie.

Cała sztuczka polega na oznaczaniu, który model Explorera ma uznać dany komentarz za komentarz, a który za zwykły kod HTML do przetworzenia. Tym sposobem można uruchamiać całe fragmenty strony tylko w wybranych modelach przeglądarki.

Ulepszone komentarze

Zwykły komentarz zna każdy:

<!--To tylko komentarz--> 

Tekst pomiędzy znakami początku i końca komentarza nie jest wyświetlany. Jak widać, komentarz nie ma tagu zamykającego, można więc uznać, że tekst, który zawiera jest jakby jego atrybutem. A oto komentarz warunkowy:

<!--[if IE 6]> 
<H1>Ten tytuł ukaże się tylko w Explorerze 6</H1> 
<![endif]--> 

Komentarz warunkowy ma dwa tagi – otwierający i zamykający, pomiędzy którymi można wpisać dowolny fragment kodu (łącznie ze skryptami). Kod wewnątrz komentarza będzie wyświetlany (przetwarzany) jeśli warunek podany w tagu otwierającym zostanie spełniony. W przeciwnym razie cała konstrukcja będzie traktowana jak zwykły komentarz i nie zostanie wyświetlona.

Warto zauważyć, że Explorery starsze niż 5 i przeglądarki innych firm potraktują całość jak tradycyjny komentarz i nie wyświetlą zawartej w nim treści – pierwsze cztery i ostatnie trzy znaki to przecież typowe symbole początku i końca komentarza. Oznaczona w ten sposób treść zostanie pokazana tylko we wskazanym modelu przeglądarki Internet Explorer.

Istnieje też drugi rodzaj komentarza warunkowego:

<![if IE 6]> 
<H1>Ten tytuł ukaże się tylko w Explorerze 6</H1> 
<![endif]> 

W przeglądarce IE5 i w nowszych zadziała on identycznie jak poprzedni przykład. Różnice wystąpią w starszych Explorerach i w przeglądarkach innych firm – ten rodzaj komentarza zostanie w nich wyświetlony (tagi otwierający i zamykający nie zostaną rozpoznane i będą pominięte, a tekst pomiędzy nimi zostanie potraktowany jak zwykły fragment kodu strony). Rodzaj komentarza można więc dobrać w zależności od pożądanego efektu w przeglądarkach nie znających tej konstrukcji.

Warunki

Na razie dostępne jest tylko rozpoznawanie modelu przeglądarki (choć Microsoft obiecuje, że ten zakres będzie rozszerzany). A zatem:

[if IE] – to po prostu rozpoznanie Internet Explorera o dowolnym modelu (w praktyce 5 lub nowszego, bo poprzednie nie rozpoznają komentarzy warunkowych).

[if IE 5] – to rozpoznanie konkretnego modelu Explorera (w tym przypadku 5) w dowolnym „podmodelu”. Przytoczony warunek będzie spełniony dla IE 5.0, 5.1, 5.5, ale nie będzie spełniony dla IE6.

[if IE 5.5000] – to rozpoznanie konkretnego „podmodelu” Explorera (w tym przypadku tylko i wyłącznie 5.5). Przytoczony warunek nie będzie spełniony ani dla Explorera 6, ani dla Explorera 5.0 lub 5.1. Ważne jest czterocyfrowe oznaczenie po kropce – niestety, trzeba tu podawać pełną „podwersję”, wpisanie samego 5.5 nie wystarczy.

Metoda ta jest nieco zdradliwa, bo może się trafić Explorer na oko identyczny z oczekiwanym, a jednak inaczej oznaczony. Microsoft podaje np., że Explorer 5.0 rozprowadzany z Windows2000 miał oznaczenie 5.0002, a zatem warunek [if IE 5.0000] go nie wykryje. Rozwiązaniem może być zastosowanie dodatkowego operatora:

[if operator IE model] – gdzie operator to:

! – czyli: NOT (negacja);
lt – czyli: < (mniejszy niż); gt - czyli: > (większy niż);
lte – czyli: <= (mniejszy lub równy); gte - czyli: >= (większy lub równy).

Pajączek.pl - twórz poprawiaj publikuj

Przykładowo:

[if gte IE 5] – warunek będzie spełniony dla wszystkich Explorerów 5 i nowszych (czyli dla 5.0, 5.1, 5.5, 6 itd.).

[if gte 5.5000] – warunek będzie spełniony dla Explorerów 5.5 i nowszych.

[if lt IE 6] – warunek będzie spełniony dla Explorerów starszych niż 6 (czyli w praktyce wszystkich modeli 5, bo IE4 nie rozpoznaje komentarzy warunkowych).

[if ! IE 6] – warunek będzie spełniony dla Explorerów innych niż 6.

Można konstruować warunki złożone z użyciem nawiasów i operatorów ‚|’ (OR) i ‚&’ (AND) oraz podanych wprost wartości true lub false (choć to ostatnie ma raczej niewielkie zastosowanie, bo oznacza, że warunek będzie spełniony zawsze lub nigdy). Np.:

<!--[if lt IE 5.5000]> 
Masz Explorera 5 - w miarę możliwości uaktualnij go przynajmniej do 5.5. 
<![endif]--> 
<!--[if (gte IE 5.5000) & (lt IE 6)]> 
Masz Explorera 5.5 - na razie nie musisz nic zmieniać. 
<![endif]--> 
<!--[if gte IE 6]> 
Masz Explorera 6 lub nowszego. Znakomicie, jesteś bardzo na czasie! 
<![endif]--> 
<![if false]> 
Masz bardzo starego Explorera lub przeglądarkę innej firmy. Nie obejrzysz więc 
tego serwisu... 
<![endif]> 

Nietypowe zastosowania

Komentarz warunkowy może mieć wiele ciekawych zastosowań wykraczających poza wyświetlanie napisów jak w przykładzie powyżej. Umożliwia proste zautomatyzowanie strony w zależności od wykrytej przeglądarki nie wymagające użycia skryptów (i co ważniejsze, działające przy wyłączonej obsłudze skryptów!). Np. (w sekcji HEAD):

<!--[if gte IE 6]> 
<LINK REL="stylesheet" HREF="style6.css" 
TYPE="text/css"> 
<![endif]--> 
<![if lt IE 6]> 
<LINK REL="stylesheet" HREF="style5.css" 
TYPE="text/css"> 
<![endif]> 

…w przypadku Explorera 6 zostanie załadowany arkusz style6.css, w przypadku starszych Explorerów i przeglądarek innych firm – arkusz style5.css. Podobnie można wybierać skrypty.

<!--[if warunek]> 
<IFRAME NAME="Ramka" SRC="strona1.htm"></IFRAME> 
<![endif]--> 
<![if ! warunek]> 
<IFRAME NAME="Ramka" SRC="strona2.htm"></IFRAME> 
<![endif]> 

…w zależności od spełnienia warunku do ramki IFRAME zostanie załadowana odpowiednia strona.

<HTML> 
<HEAD> 
<!--[if IE]> 
<META HTTP-EQUIV="Refresh" CONTENT="0; 
URL=index1.htm"> 
<![endif]--> 
<![if false]> 
<META HTTP-EQUIV="Refresh" CONTENT="0; 
URL=index2.htm"> 
<![endif]> 
</HEAD> 
<BODY> 
</BODY> 
</HTML> 

…Explorery 5 i nowsze zostaną przekierowane na stronę index1.htm, starsze i inne przeglądarki – na stronę index2.htm.

Komentarzy warunkowych nie należy zagnieżdżać ani mieszać ze zwykłymi komentarzami. Lepiej więc usunąć tradycyjne komentarze z fragmentów kodu objętych komentarzami warunkowymi. Choć Explorerowi taka sytuacja nie przeszkadza, może dać zupełnie nieoczekiwane efekty w przeglądarkach innych firm.

We fragmentach przeznaczonych wyłącznie dla Explorera można korzystać z dodatkowego znacznika , będącego również komentarzem, ale którego zawartością – w odróżnieniu od zwykłych komentarzy – można łatwo manipulować przy pomocy skryptów.

Paweł Rajewski