JavaScript wykonuje się w przeglądarce, po stronie klienta. Jak dołączyć skrypt znacznikiem script i plikiem z atrybutem src, gdzie go postawić, jak pisać średniki i komentarze oraz czym różnią się console.log, alert, innerHTML i document.write. Lekcja 11.1 kursu INF.03.
JavaScript to język skryptowy wykonywany przez przeglądarkę, czyli po stronie klienta: kod dołączony do strony uruchamia się na komputerze użytkownika, a serwer nie bierze w tym udziału. Dzięki temu strona reaguje na kliknięcie, sprawdza formularz przed wysłaniem i podmienia treść bez przeładowania. W części pisemnej wracają pytania „którego języka użyć po stronie klienta", „jak dołączyć plik skrypt.js do strony", „od czego zaczyna się komentarz" i „co wypisze przedstawiony skrypt". W zadaniu praktycznym jednym z ocenianych rezultatów jest „działanie witryny internetowej", a w nim skrypt JavaScript uruchamiany przyciskiem albo przy załadowaniu strony.
Przeglądarka kontra serwer
Strona klienta to przeglądarka na komputerze użytkownika, a strona serwera to komputer z serwerem WWW i serwerem bazy danych. JavaScript pracuje wyłącznie po stronie klienta: do uruchomienia skryptu wystarczy sama przeglądarka, bez Apache, bez PHP i bez MySQL. Kod nie jest kompilowany do postaci maszynowej, tylko interpretowany, czyli czytany i wykonywany instrukcja po instrukcji przez silnik wbudowany w przeglądarkę.
PHP jest przeciwieństwem: wykonuje się na serwerze, a do przeglądarki trafia sam wynik jego pracy, więc kodu PHP w źródle strony nigdy nie widać. Opisuje to lekcja PHP po stronie serwera. Podział ról w pytaniach jest stały: zapisanie zamówienia do bazy, sprawdzenie hasła i pobranie wierszy z tabeli to zadania serwera, a natychmiastowa reakcja na kliknięcie, podmiana treści akapitu i sprawdzenie, czy pole formularza nie jest puste, to zadania JavaScriptu. Wyłącznie po stronie serwera działają PHP, Python, Java, C# i Ruby. Konsola przeglądarki, otwierana klawiszem F12 w zakładce Konsola, pokazuje błędy skryptu i pozwala wykonać pojedynczy wiersz kodu. To ona jest odpowiedzią na pytanie, czym testuje się kod JavaScript: konsolą w przeglądarce, nie interpreterem PHP ani kompilatorem C++. Krótki fragment bez własnej strony uruchomi w przeglądarce interpreter JavaScript. Pułapka: Java i JavaScript to dwa różne języki. Java jest kompilowana i uruchamiana przez maszynę wirtualną, najczęściej po stronie serwera, a JavaScript jest interpretowany przez przeglądarkę. Wspólny człon nazwy pochodzi z reklamy z 1995 roku i niczego nie znaczy.
Dołączanie skryptu do strony
<script> (skrypt) to znacznik, którym kod JavaScript trafia do dokumentu HTML. Ma dwie postacie. Pierwsza trzyma kod wprost między znacznikiem otwierającym a zamykającym, i tak wygląda większość ramek z pytań.
<script>
alert("Witaj w sklepie");
</script>
Druga wskazuje plik zewnętrzny atrybutem src (źródło). Plik ma rozszerzenie .js i zawiera sam kod JavaScript, bez znacznika <script> i bez HTML.
<script src="skrypt.js"></script>
Znacznik z atrybutem src musi mieć część zamykającą, a kod wpisany w jego środek zostaje pominięty. Zapisy podsuwane w pytaniach jako pułapki to <link rel="script" href="skrypt.js">, <script link="skrypt.js"> oraz <script>skrypt.js</script>: w ostatnim nazwa pliku jest dla przeglądarki zwykłym tekstem do wykonania, a nie adresem. Znacznika <java> w HTML nie ma w ogóle.
Skrypt zadziała i w sekcji head, i w body, i taka jest odpowiedź w pytaniu o dopuszczalne miejsca. Przeglądarka buduje stronę od góry do dołu i wykonuje skrypt w chwili, gdy na niego trafi, więc miejsce rozstrzyga o czym innym: skrypt z sekcji head rusza, zanim powstanie treść strony, i szukanego elementu jeszcze nie znajdzie. Dlatego skrypt sięgający po elementy strony stawia się tuż przed </body>, na końcu treści, i dokładnie tam dołącza się plik .js w zadaniu praktycznym. Sam szkielet dokumentu opisuje lekcja Szkielet dokumentu HTML. Instrukcje, wielkość liter i komentarze
Instrukcja to pojedyncze polecenie dla przeglądarki, zakończone średnikiem. Przeglądarka potrafi dostawić brakujący średnik sama, ale robi to według własnych reguł, więc w kodzie na egzamin pisze się go po każdej instrukcji. Kilka instrukcji obejmuje blok w nawiasach klamrowych: to on należy do instrukcji if albo do pętli, a brak klamry przy dwóch wierszach jest błędem, przez który komunikat nie pojawia się wcale.
JavaScript rozróżnia wielkie i małe litery. Zmienne cena i Cena to dwie różne zmienne, a nazwa metody przepisana z błędem, jak getElementByTagName zamiast getElementsByTagName, kończy się komunikatem, że taka funkcja nie istnieje. Nazwy metod przepisuje się dokładnie z tabeli modelu DOM dołączonej do arkusza.
Nazwa zmiennej składa się z liter, cyfr, podkreślenia i znaku dolara, nie zaczyna się od cyfry i nie zawiera spacji ani polskich znaków. Poprawne jest imie2, a imię2, #imie i 2imie nie. Znak $ przed nazwą, obowiązkowy w PHP, w JavaScripcie jest zwykłą literą nazwy, a nie wymaganiem.
Komentarz to tekst pomijany przy wykonaniu, wpisany dla człowieka czytającego kod. Jednowierszowy zaczyna się od // i sięga do końca wiersza, a wielowierszowy stoi między /* a */. Znaki # znane z PHP oraz <!-- z HTML komentarza w JavaScripcie nie tworzą.
Wynik w konsoli: 316.
Trzy sposoby pokazania wyniku
Wynik pracy skryptu trzeba gdzieś pokazać, a każda z dróg trafia gdzie indziej. console.log (zapis w dzienniku konsoli) wypisuje wartość w konsoli przeglądarki, którą widzi programista, a nie użytkownik strony. Służy do sprawdzania, co siedzi w zmiennej w danym momencie. Nazw console.write, console.print ani console.echo w języku nie ma.
alert (ostrzeżenie) otwiera okno z komunikatem i przyciskiem OK, a strona czeka na jego zamknięcie. Dwa pokrewne okna dopełniają zestaw: prompt (zapytaj) pyta o wartość i zwraca to, co użytkownik wpisał, a confirm (potwierdź) daje przyciski OK oraz Anuluj i zwraca prawdę albo fałsz.
innerHTML (wewnętrzna treść HTML) to właściwość elementu, która trzyma jego zawartość. Po pobraniu elementu metodą document.getElementById("id") przypisanie do innerHTML podmienia to, co widać w środku. Tego sposobu oczekuje arkusz, bo wynik ma pojawić się we wskazanym miejscu strony, a nie w oknie ani w konsoli.
<p id="wynik">Brak danych</p>
<script>
document.getElementById("wynik").innerHTML = "Do zapłaty: 316 zł";
</script>
Wynik: akapit z napisem Brak danych pokazuje po wykonaniu skryptu Do zapłaty: 316 zł.
document.write (pisz w dokumencie) dopisuje tekst wprost do dokumentu w miejscu, w którym stoi skrypt, i przyjmuje także znaczniki HTML. Kolejne fragmenty skleja się w nim znakiem plus, nie kropką znaną z PHP.
<script>
document.write("<h2>Promocja dnia</h2>");
</script>
Wynik: w tym miejscu strony pojawia się nagłówek Promocja dnia. Wywołany już po wczytaniu strony, na przykład z przycisku, document.write kasuje całą jej dotychczasową zawartość i zostawia sam nowy tekst, więc na działającej stronie stosuje się innerHTML. Znać go trzeba, bo w pytaniach i w arkuszach stoi wszędzie.
Pierwszy skrypt na stronie sklepu
Skrypt osadzony w stronie to najkrótsza droga od pustego akapitu do wyniku obliczenia. Strona sklepu komputerowego z wcześniejszych lekcji dostaje akapit z identyfikatorem i skrypt tuż przed </body>, który ten akapit wypełnia.
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Sklep komputerowy</title>
</head>
<body>
<h1>Nasze produkty</h1>
<p id="podsumowanie">Brak danych</p>
<script>
let cena = 79;
let ilosc = 4;
document.getElementById("podsumowanie").innerHTML = "Do zapłaty: " + cena * ilosc + " zł";
</script>
</body>
</html>
Wynik: strona pokazuje nagłówek Nasze produkty i akapit Do zapłaty: 316 zł. Ten sam kod przeniesiony do pliku skrypt.js traci znacznik <script> i nic poza tym, a strona dołącza go wierszem <script src="skrypt.js"></script> w tym samym miejscu, przed </body>. Zmienne i operatory użyte w środku opisuje lekcja o zmiennych, typach i operatorach. Na egzaminie
Pytania pisemne z tej lekcji mają kilka stałych kształtów. Pytanie o język skryptu wykonywanego po stronie klienta w przeglądarce ma odpowiedź JavaScript, a PHP, Python i Perl są w nim odpowiedziami błędnymi. Pytanie o oprogramowanie wymagane do uruchomienia skryptu wskazuje samą przeglądarkę, nie serwer WWW i nie serwer MySQL. Wykonanie kodu JavaScript wymaga interpretowania, a nie kompilowania ani zamiany na kod maszynowy, a testuje się go konsolą w przeglądarce. Dołączenie zewnętrznego pliku to <script src="skrypt.js"></script>, komentarz jednowierszowy zaczyna się od //, a wstawki kodu mogą stać zarówno w head, jak i w body, zawsze w znaczniku <script>.
Kilka odpowiedzi myli regularnie. Nazwa MessageBox nie należy do JavaScriptu, choć stoi w pytaniu obok prawdziwych window.alert, document.write i innerHTML. Okno z polem do wpisania danych i przyciskami OK oraz Anuluj daje prompt, a nie alert, bo alert ma tylko przycisk OK. Fragmenty tekstu skleja się znakiem plus, więc poprawny jest zapis document.write("Kwalifikacja: " + A), a wersje z kropką, średnikiem albo z samą spacją w tym miejscu nie. Zawartość elementu podmienia innerHTML, nie innerBody ani Body. Java z listy języków serwerowych to inny język niż JavaScript.
W zadaniu praktycznym polecenie brzmi zwykle „przycisk uruchamiający skrypt" albo „komórki tabeli wypełniane przez skrypt". Skrypt zapisuje się w stronie albo w osobnym pliku .js dołączonym przed </body>, a jego wynik trafia do wskazanego elementu przez innerHTML. Oceniane są dwa rezultaty naraz, zawartość witryny i jej działanie, więc skrypt z błędem składni kosztuje punkty w obu.
Ściąga
<script> ... </script>
kod JavaScript wpisany wprost w dokument HTML
<script src="skrypt.js"></script>
dołączenie zewnętrznego pliku, z częścią zamykającą
miejsce przed </body>
strona jest już zbudowana, skrypt znajdzie jej elementy
//
komentarz do końca wiersza
/* ... */
komentarz wielowierszowy
{ }
blok instrukcji należący do warunku albo pętli
console.log(x);
wypisanie wartości w konsoli przeglądarki
alert("tekst");
okno z komunikatem i przyciskiem OK
prompt("pytanie");
okno z polem do wpisania danych, zwraca wpisany tekst
confirm("pytanie");
okno z OK i Anuluj, zwraca prawdę albo fałsz
document.getElementById("id")
pobranie elementu o podanym identyfikatorze
.innerHTML = "tekst";
podmiana zawartości pobranego elementu
document.write("tekst");
dopisanie tekstu do dokumentu w trakcie budowania
"Do zapłaty: " + x
sklejenie tekstu z wartością zmiennej
Pobierz ściągę PDF