Przejdź do treści
Cream Software
  • Start
  • Aplikacje
  • App Store
  • Google Play
  • O nas
  • Jak działamy
  • Blog
  • Kontakt
    • 🇵🇱 Polski
    • 🇺🇸 English
    • 🇵🇱 Polski
    • 🇺🇸 English

    Blog

    Komentarze warunkowe w Internet Explorer

    Opublikowano
    6 września 2003
    Aktualizacja
    27 marca 2023
    • HTML i tworzenie stron
    • #projektowanie
    • #przeglądarki
    • #scripting
    Komentarze warunkowe w Internet Explorer

    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).

    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

    Powiazane aplikacje Cream Software

    Jesli ten temat jest Ci bliski, sprawdz nasze aplikacje i narzedzia.

    • Spider V6
    • Gonna Rain?
    • Money Gone?!
    • Heartie

    Kategorie

    • Grafika i foto na WWW
    • HTML i tworzenie stron
    • Internet
    • JavaScript VBScript Ajax
    • Mobile
    • Nowe wersje programów
    • Nowości w Cream Software
    • Odtwarzanie i konwersja filmów
    • Odzyskiwanie danych
    • Pająk
    • PHP - Perl - mySQL
    • Sprzęt
    • Style CSS
    • Wpis gościnny
    • Zamknięte projekty

    Nowoczesne aplikacje mobilne i desktopowe, które działają latami.

    Polityka prywatności | Regulamin | Kontakt

    © Cream Software. Wszelkie prawa zastrzeżone.

    Developed by cream.software

    Mierzymy wizyty bez analitycznych cookies. Po Twojej zgodzie używamy także analitycznych cookies. Szczegóły znajdziesz w Polityce prywatności.