Ramki#
Ostrzeganie przed ramkami#
Ramki są bardzo specyficzną konstrukcją (wychodzącą z obiegu), która prawdę mówiąc nie pasuje do koncepcji hipertekstu. Strona na ramkach to tak na prawdę dwa lub więcej dokumentów. Większość najgorszych bolączek ramek wywodzi się z tego, że URL zawsze wskazuje tylko jeden dokument.
Największym problemem jest indeksowanie przez wyszukiwarki sieciowe. W wynikach wyszukiwania mogą pojawić się strony składowe struktury ramkowej, bez żadnego menu ani spisu treści. Strona taka jest jakby wyrwana z szerszej całości, bez możliwości wczytania głównego pliku bazowego. Aby zapobiec takim sytuacjom, można na każdej stronie, która ma zostać wyświetlona w ramkach, wstawić odpowiedni kod. Sposobów na to może być wiele, przytoczę tylko kilka najprostszych/najpopularniejszych.
Bezpośredni odnośnik#
Najprostsza metoda polega na sztywnym wstawieniu odsyłacza do każdej strony, która ma zostać wyświetlona w ramkach (oprócz bazowej). Link będzie zawierał bezpośrednie przekierowanie do strony bazowej. Można go odpowiednio ostylować, ewentualnie pomniejszyć, by zajmował jak najmniej miejsca.
<a href="index.html" target="_top">[Strona startowa]</a>
Działanie konstrukcji przedstawione zostało w następującym żywym przykładzie. Jest to odsyłacz prowadzący do strony wyrwanej z układu ramkowego. Kliknięcie odpowiedniego łącza umożliwi wczytanie głównej strony z podziałem na ramki.
Jest to bardzo nieoptymalne rozwiązanie. Treść odsyłacza pojawia się zawsze, niezależnie od sposobu wczytania strony (w układzie ramkowym lub osobno). Ponadto, atrybut target=""
został usunięty w wersji Strict DTD, jeśli zależy nam na walidacji dokumentu musimy stosować starsze deklaracje. Na domiar złego, każdorazowa próba modyfikacji odnośnika wiązałaby się z koniecznością edycji wszystkich plików wczytywanych do ramki (w przypadku rozbudowanych serwisów bardzo żmudne zadanie).
Dynamiczna treść#
Po raz kolejny najwygodniej będzie sięgnąć po JavaScript. Rozwiązań może być bardzo wiele, przedstawiam tylko te podstawowe.
Wariant 1#
W skrypcie należy przeprowadzić odpowiednią detekcję załadowanej strony i jeśli to konieczne, wstawić treść, która poinformuje czytelnika o wczytaniu strony poza układem ramkowym. Oto przykładowy kod:
<script type="text/javascript"></script>
Działanie konstrukcji przedstawione zostało w następującym żywym przykładzie. Jest to odsyłacz prowadzący do strony wyrwanej z układu ramkowego. Kliknięcie odpowiedniego łącza umożliwi wczytanie głównej strony z podziałem na ramki.
O tyle wygodne, że dodatkowa informacja pojawi się dopiero, kiedy będzie to niezbędne (pod warunkiem włączonej obsługi JS przez czytelnika). Kolejna sprawa to wygodniejsza modyfikacja. Można umieścić skrypt w zewnętrznym pliku .js
i wstawić do każdej strony ładowanej do ramki. Dzięki temu z jednego miejsca można sterować działaniem polecenia, bez konieczności edycji każdego pliku wczytywanego do ramki. Ostatnia zaleta rozwiązania to walidacja w przypadku Strict DTD.
Wariant 2#
Pewną odmianą wariantu pierwszego będzie automatyczne przekierowanie użytkownika od razu do strony głównej, jeśli tylko wczytana zostanie podstrona serwisu poza ramkami. Oto przykładowy kod:
<script type="text/javascript">
if (self == parent){
location.href = "index.html";
}
</script>
Działanie konstrukcji przedstawione zostało w następującym żywym przykładzie. Jest to odsyłacz prowadzący do strony wyrwanej z układu ramkowego. Ewentualny powrót (wczytanie) strony bazowej odbywa się automatycznie - bardzo szybko, można nie zaobserwować efektu przejścia.
Sposób ten jest najbardziej przydatny na podstronach, które są wczytywane do ramek na starcie, tzn. dla tych, które są wpisane na stronie bazowej ramek w atrybutach src="..."
.
Prezentowana metoda może nie być wygodna, jeśli użytkownik odnajdzie dowolną podstronę naszego serwisu w wyszukiwarce sieciowej. W takim przypadku nastąpiłoby natychmiastowe przejście do strony głównej i wczytanie podstron startowych. Użytkownik straciłby z oczu treść, której szukał, a odnalezienie jej w spisie treści nie zawsze jest łatwe, co mogłoby poskutkować zniechęceniem do serwisu. Aby temu zapobiec, na podstronach które nie są ładowane na starcie, nie powinniśmy używać skryptu z tego przykładu, ale raczej ten z Wariantu 1.
Ogólnie rzecz biorąc, stosowanie JavaScriptu będzie silnie uzależnione od danej sytuacji. Nie da się zaprezentować wszystkich możliwości. W razie konieczności należy odpowiednio zareagować na pojawiające się problemy i utrudnienia w przeglądaniu serwisu opartego na ramkach.