Autor: Paweł Rajewski

Gdy tworzymy serwis z zamiarem publikowania go w Sieci, wiele funkcji Internet Explorera jest ograniczonych ze względów bezpieczeństwa. W trybie offline mamy dostęp do wielu ukrytych funkcji.

Nie mamy wpływu na stałe elementy okna przeglądarki, musimy liczyć się z ustawieniami (np. wyłączeniem obsługi skryptów) dokonanymi przez klienta. Również same skrypty mają ograniczoną funkcjonalność i czasem nie można osiągnąć nimi tego co, teoretycznie, byłoby możliwe (np. zmniejszenie okna poniżej pewnej wielkości czy swobodny dostęp do plików na dysku klienta). Wiele z tych ograniczeń zniesiono w specjalnym trybie off-line (HTA) wprowadzonym w Internet Explorerze 5. W szczególności:

— można określać wygląd okna, w którym uruchamiany jest serwis np. usunąć z niego pasek tytułowy, zmienić obramowanie, dodać własną ikonę. Można wyświetlić serwis w oknie pozbawionym jakichkolwiek elementów, a nawet uruchomić go w sposób niewidoczny (bez okna i przycisku na pasku zadań).

— można blokować niektóre funkcje systemowe, takie jak menu kontekstowe, menu systemowe, zaznaczanie na stronie czy możliwość zmieniania rozmiaru okna.

— serwis automatycznie uznawany jest za „zaufany” – przestają funkcjonować ograniczenia ustawione w przeglądarce i ograniczenia skryptów (np. można zamknąć programowo przeglądarkę bez pytania użytkownika o zgodę).

— skutkiem zniesienia ograniczeń jest uruchamiane wszystkich skryptów i swobodny dostęp do obiektów ActiveX. Chyba najpraktyczniejszy z nich to FileSystemObject oferujący dostęp do dysku z możliwością tworzenia, zmieniania, kopiowania, przenoszenia i kasowania plików.

— na pasku tytułowym okna i w otwieranych przez serwis okienkach (np. alert) nie pojawia się napis „Microsoft Internet Explorer”.

Jak widać, przy pracy off-line serwis „internetowy” przypomina bardziej samodzielną aplikację niż stronę napisaną w HTML-u. Stąd serwisy o tak poszerzonej funkcjonalności nazywane są „aplikacjami HLML-owymi” (HTML Application – HTA). Na dobrą sprawę znając dobrze HTML i JScript (lub VBScript) można w prosty i tani sposób napisać zupełnie przyzwoity „program” posiadając jedynie przeglądarkę internetową. Jest to więc znakomite i niedrogie rozwiązanie dla amatorów.

Co zrobić, aby uzyskać taką funkcjonalność serwisu?

Po pierwsze, trzeba zapisać stronę z rozszerzeniem *.hta zamiast *.htm lub *.html. To pierwszy sygnał dla przeglądarki, że ma do czynienia z „aplikacją” napisaną w HTML, a nie ze zwykłą stroną. Warto zauważyć, że w związku ze zmienionym rozszerzeniem, takich stron-aplikacji nie należy umieszczać w Sieci, na zdalnym serwerze – nie zostaną one bowiem otwarte przez przeglądarkę, ale pobrane (analogicznie jak np. pliki *.exe). Dopiero po pobraniu i zapisaniu na dysk będzie można uruchomić serwis-aplikację lokalnie.

Po drugie, w ramach sekcji HEAD trzeba umieścić nowy tag:

<HTA:APPLICATION [atrybuty...] ></HTA:APPLICATION>

sterujący zachowaniem się aplikacji i wyglądem okna. Tag posiada szereg atrybutów, z których najbardziej użyteczne to:

Wygląd:

BORDER=”wartość” – określa typ obramowania okienka, w jakim uruchamiana jest aplikacja. Możliwe wartości: thick, dialog, thin, none. Wartość thick to typowe obramowanie pozwalające na zmianę wielkości okienka. Ciekawa jest wartość none wyświetlająca okno bez żadnych obramowań. Domyślnie: thick.

BORDERSTYLE=”wartość” – określa rodzaj obramowania okna aplikacji (każde okno ma dwa obramowania – całego okna, kontrolowane przez BORDER, i samej aplikacji kontrolowane przez BORDERSTYLE). Możliwe wartości: normal, complex, raised, static, sunken. Domyślnie: normal.

INNERBORDER=”wartość” – określa czy wyświetlić wewnętrzne obramowanie okna. Możliwe wartości: yes, no. Domyślnie: yes.

CAPTION=”wartość” – określa czy okno ma posiadać pasek tytułowy. Możliwe wartości: yes, no. Domyślnie: yes.

ICON=”ścieżka” – określa ścieżkę do ikony w formacie *.ico, która zostanie wyświetlona na pasku tytułowym okienka jako ikona aplikacji. Domyślnie: ikona systemowa.

MAXIMIZEBUTTON=”wartość” – określa czy na pasku tytułowym okienka wyświetlić przycisk maksymalizujący okno. Możliwe wartości: yes, no. Domyślnie: yes.

MINIMIZEBUTTON=”wartość” – określa czy na pasku tytułowym okienka wyświetlić przycisk minimalizujący okno. Możliwe wartości: yes, no. Domyślnie: yes.

Przewijanie:

SCROLL=”wartość” – określa czy w oknie wyświetlać paski przewijania. Możliwe wartości: yes, no, auto. Domyślnie: yes.

Pajączek.pl - twórz poprawiaj publikuj

SCROLLFLAT=”wartość” – określa czy wyświetlać płaskie paski przewijania. Możliwe wartości: yes, no. Domyślnie: no.

Zachowanie:

WINDOWSTATE=”wartość” – określa początkowy rozmiar okna aplikacji. Możliwe wartości: normal, minimize, maximize. Domyślnie: normal.

SYSMENU=”wartość” – określa czy wyświetlać menu systemowe po kliknięciu ikony na pasku tytułowym. Możliwe wartości: yes, no. Domyślnie: yes.

CONTEXTMENU=”wartość” – określa czy wyświetlać menu kontekstowe wywoływane prawym klawiszem myszy. Możliwe wartości: yes, no. Domyślnie: yes.

SELECTION=”wartość” – określa czy zawartość serwisu może być zaznaczana. Możliwe wartości: yes, no. Domyślnie: yes.

Ogólne:

APPLICATIONNAME=”nazwa” – określa nazwę aplikacji, pod jaką będzie ona widziana przez system operacyjny.

SINGLEINSTANCE=”wartość” – określa czy tylko jedna aplikacja o podanej nazwie może funkcjonować równocześnie (w przeciwnym razie program może być uruchomiony kilkakrotnie w osobnych oknach). Możliwe wartości: yes, no. Domyślnie: no.

SHOWINTASKBAR=”wartość” – określa czy działająca aplikacja ma być widoczna na pasku zadań. Możliwe wartości: yes, no. Domyślnie: yes.

NAVIGABLE=”wartość” – określa czy linki zawarte na stronie-aplikacji mają być otwierane w oknie aplikacji (w przeciwnym razie będą otwierane w nowym oknie przeglądarki). Możliwe wartości: yes, no. Domyślnie: no.

Wiele atrybutów jest wzajemnie powiązanych. Np. jeśli ustawimy brak paska tytułowego, znikną oczywiście przyciski maksymalizujący, minimalizujący i ikona. Podobnie będzie jeśli wyłączymy menu systemowe (posiada ono pozycję minimalizacji i maksymalizacji, nie miałoby więc sensu blokowanie tego menu i pozostawianie odpowiednich przycisków na pasku tytułowym). Jeśli usuniemy całkowicie obramowanie okna, zniknie też pasek tytułu itd.

Oto przykładowa prosta aplikacja HTA (pamiętaj, aby zapisać plik z rozszerzeniem *.hta):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML> 
<HEAD> 
<META HTTP-EQUIV="Content-type" CONTENT="text/html; 
charset=iso-8859-2"> 
<HTA:APPLICATION APPLICATIONNAME="test" SCROLL="no" 
BORDER="none" INNERBORDER="no"></HTA:APPLICATION> 
<TITLE>Próba</TITLE> 
</HEAD> 
<BODY STYLE="background: #E6E6E6;"> 
Program w oknie bez obramowania. Ciekawe, prawda? Zauważ, że program zostanie 
zakończony bez pytania o pozwolenie na zamknięcie okna.<BR> 
<A HREF="#" onclick="window.close();">Zakończ 
program</A> 
</BODY> 
</HTML> 

Jak widać, poza jednym nowym tagiem, można używać wszystkich zwykłych znaczników, właściwości i funkcji HTML, CSS, JScript.

Ponieważ aplikacja HTA ma duże uprawnienia, nie można odwołać się do niej w prosty sposób ze zwykłej strony HTML nie będącej jej częścią. Przykładowo, jeśli aplikacja ma ramkę IFRAME, a w niej otworzona jest strona HTML, to odwołanie window.parent z tej strony nie zaprowadzi do nadrzędnego okna. Strona zachowywać się będzie tak, jakby była otwarta w osobnym, własnym oknie. Aby temu zaradzić „zaufane” ramki należy oznaczyć następująco:

<IFRAME SRC="strona.html" 
APPLICATION="yes"></IFRAME> 

Z tak opisanej ramki skrypty mogą odwoływać się „w górę” tj. do głównego okna aplikacji.

Jeśli aplikacja HTA ma ustawioną wartość NAVIGABLE=”yes”, wszystkie strony HTML otwierane w jej oknie również będą „zaufane” i traktowane jakby były częścią aplikacji („zaufane” jest bowiem wszystko co jest otwierane w „zaufanym” oknie). Warto więc uważać w przypadku korzystania ze stron czy rozwiązań zewnętrznych, nie napisanych przez siebie.

Aplikacje HTA dają twórcy duże możliwości, ale niosą też zagrożenia. Mogą zawierać niebezpieczne skrypty – bądź w skutek zawartych w nich błędów, bądź wprost w wyniku złośliwej intencji programisty. Swobodny dostęp do dysku to broń obosieczna i trzeba o tym pamiętać. Jeśli aplikacja *.hta pochodzi z niepewnego źródła, warto traktować ją tak, jak każdy nieznany program – czyli ze sporą dozą ostrożności.

Paweł Rajewski

Skasowane dane to nie zawsze tragedia - ściągnij program i odzyskaj dane