JavaScript - DHBW Stuttgart
Transcription
JavaScript - DHBW Stuttgart
Webengineering JavaScript Marcel Vilas Dienstag, 9. Juli 13 1 DHBW - Stuttgart 1 JavaScript - Historie • • • • • • • • Interpretierte Programmiersprache mit objektorientierten Fähigkeiten Syntaktisch ähnlich zu C, C++ oder Java Wird vom Browser ausgeführt und ist im HTML eingebettet (clientseitiges JavaScript) Standardisiert durch ECMA (aber browserspezifische Erweiterungen) Aktuelle Version in allen Browsern ab Netscape 4.5 und IE 4 Lange Pause in der Entwicklung (mittlerweile wieder aufgenommen) Name kommt von Netscape/Mozilla, richtiger Name: ECMAScript Kann auch in anderen Anwendungen als eingebettete Skriptsprache verwendet werden (z.B. Phillips Pronto Fernbedienung) 2 Dienstag, 9. Juli 13 2 JavaScript - Sicherheit • • • Kann keine Dateien auf dem Client lesen oder schreiben Hat keine Netzwerkfunktionalitäten, um externe Verbindungen aufzubauen Browsereinstellungen: ‣ Pop-ups unterdrücken ‣ self.close() auf andere Fenster unterdrücken ‣ Verschleierung von Linkzielen unterdrücken ‣ Zu kleine Fenster verbieten ‣ Modifizierung von Value-Attribut bei Fileuploads verhindern ‣ Lesen von externen Dokumenten verbieten 3 Dienstag, 9. Juli 13 3 Javascript - ein Beispiel <html> <head> <script type="text/ javascript"> alert('Hello World!'); </script> </head> <body> </body> </html> • • <html> <head> <script type="application/ javascript"> alert('Hello World!'); </script> </head> <body> </body> </html> <html> <head> <script language="JavaScript"> alert('Hello World!'); </script> </head> <body> </body> </html> Einbindung von JS-Anweisungen in ein HTML-Dokument geschieht innerhalb des Skript-Tags Syntax an C angelehnt: Anweisungen werden mit Semikolon beendet 4 Dienstag, 9. Juli 13 4 JavaScript - Grundlagen Kommentare: <script type="text/javascript"> alert('einzeiliger Kommentar.'); //einzeiliger C-Kommentar bis Zeilenende oder JS-Blockende </script> <script type="text/javascript"> alert('Zeilenkommentar'); /* mehrzeiliger Kommentar, der bis zum Kommentarende geht und auch '?>' und HTML einschließt. */ </script> 5 Dienstag, 9. Juli 13 5 JavaScript - Grundlagen Dateien einschließen: <script type="text/javascript" src="../js/functions.js"></script> • • • • Das src Attribut nimmt eine URL an (einbinden externer Dateien möglich) Hat üblicherweise die Dateiendung ".js" Enthält reines JavaScript und kein HTML Vorteile: ‣ ‣ ‣ Vereinfacht die HTML-Dateien Wird einmal definiert, kann aber mehrmals verwendet werden Wird vom Browser gecached und verringert die Ladezeit 6 Dienstag, 9. Juli 13 6 JavaScript - Grundlagen HTML Event-Handler onclick ondblclick onmousedown onmouseup onmouseover onmouseout onchange onload Klick auf Element (Buttons, a, area) Doppelklick auf Element (Buttons, a, area) Sobald Maustaste gedrückt wird (meiste Elemente) Sobald Maustaste losgelassen wird (meiste Elemente) Sobald Mauszeiger über Element ist (meiste Elemente) Sobald Mauszeiger Element verlässt (meiste Elemente) Wenn Benutzer Wert verändert (input, select, textarea) Wenn das Dokument vollständig geladen hat (body) 7 Dienstag, 9. Juli 13 7 JavaScript - Grundlagen Das Window Objekt: • • • Oberstes Objekt der JavaSkript-Objektfamilie Erlaubt die Abfrage und Kontrolle über das Dokumentfenster Das aktuelle Fenster kann über die Schlüsselwörter "window" oder "self" angesprochen werden Unterobjekte: document event history location Inhalt des Browserfensters Ereignisse ermitteln und weiterverarbeiten Besuchte Webseiten des Anwenders URI der angezeigten Seite 8 Dienstag, 9. Juli 13 8 JavaScript - Grundlagen Window-Eigenschaften: window.outerWidth; window.outerHeight; • Größe des Browserfensters auf dem Desktop. window.screenX; window.screenY; • Position des Browserfensters auf dem Desktop. window.innerWidth; window.innerHeight; • Größe des Viewports (Inhaltsbereich des Browserfensters). window.pageXOffset; window.pageYOffset; • Größe des bereits gescrollten Bereichs. 9 Dienstag, 9. Juli 13 9 JavaScript - Grundlagen Window-Methoden: window.open([string URL], [string name], [string options]); • Öffnet ein neues Browserfenster. window.close(); • Schließt das Browserfenster. window.moveto(integer x, integer y); • Verschiebt das Fenster an die angegebene Position. window.moveby(integer x, integer y); • Verschiebt das Fenster um die angegebenen Werte. 10 Dienstag, 9. Juli 13 10 JavaScript - Grundlagen Window-Methoden: window.scrollTo(integer x, integer y); • Scrollt das Browserfenster auf die angegebene Position. window.scrollBy(integer x, integer y); • Scrollt das Browserfenster um die angegebenen Werte. window.resizeTo(integer w, integer h); • Verändert die Fenstergröße auf die angegebenen Werte. window.resizeBy(integer x, integer y); • Verändert die Fenstergröße um die angegebenen Werte. 11 Dienstag, 9. Juli 13 11 JavaScript - Grundlagen Location-Objekt: <script type="text/javascript"> // location bezieht sich auf window.location alert(location); location = "othersite.html"; location.reload(); </script> Location-Methoden: location.replace(string url); • Ersetzt die Window-URL mit der angegebenen und zeigt diese an. location.reload(); • Lädt die aktuell angezeigte Webseite neu. 12 Dienstag, 9. Juli 13 12 JavaScript - Grundlagen Dialogfenster anzeigen: alert(string s); • Zeigt Meldung s an und Erwartet Bestätigung von Benutzer. confirm(string s); • Zeigt Meldung s an und frägt den Benutzer um Bestätigung/Abbruch. promt(string s, [string d]); • Zeigt Meldung s an und fordert den Benutzer zur Eingabe eines Strings auf, wobei das Eingabefeld mit d vorausgefüllt ist. 13 Dienstag, 9. Juli 13 13 JavaScript - Grundlagen Das Document Objekt: • • • Bezieht sich auf den Inhalt der im Browser angezeigt wird Erlaubt Zugriff auf den HTML-Elementenbaum (DOM) Auf das aktuelle Dokument kann man mit dem Schlüsselwort „document“ zugreifen Unterobjekte: HTML-Elemente forms images links HTML-Elemente, die direkt im body definiert sind Array mit allen Formular-Objekten des Dokuments Array mit allen Bild-Objekten des Dokuments Array mit allen Link-Objekten des Dokuments 14 Dienstag, 9. Juli 13 14 JavaScript - Grundlagen Document-Eigenschaften: document.bgColor; • Enthält die Hintergrundfarbe des Dokuments (bgcolor-Attribut von <body>) document.cookie; • Erlaubt das Lesen/Schreiben von HTTP-Cookies. document.domain; • Erlaubt Interaktion zwischen Webservern in der gleichen Domain. document.lastModified; • Enthält das Veränderungsdatum des Dokuments. 15 Dienstag, 9. Juli 13 15 JavaScript - Grundlagen Document-Eigenschaften: document.location; • Veraltetes Synonym für die Eigenschaft URL. document.referrer; • URL, die der Benutzer eingegeben hat. document.title; • Titel des Dokuments, wie er im <title>-Element definiert ist. document.URL; • URL aus des Dokuments (entspricht meist window.location.href) 16 Dienstag, 9. Juli 13 16 JavaScript - Grundlagen Elemente im DOM finden: ducument.getElementsByTagName(string tag); • Liefert ein Array mit Objekten aller Vorkommen des angegebenen Tags. ducument.getElementsByName(string name); • Liefert ein Array mit Objekten aller Elemente mit angegebenen Namen (HTML-Attribut: "name"). ducument.getElementsById(string name); • Liefert das Element mit angegebener Id (HTML-Attribut: "id"). 17 Dienstag, 9. Juli 13 17 JavaScript - Grundlagen Aufruf von JavaScript-Code: <script type="text/javascript"> var name = "Michael Krause"; </script> <body onload="execute();"> <a href="javascript:var d = new Date(); alert('Es ist: ' + d);"> Suprise! </a> <div onklick="alert('Gut gemacht!');">Klick mich!</div> </body> • • • Beim Laden des Dokuments wird der JavaScript-Code einmalig ausgeführt Durch Events kann weiterer JavaSkript-Code ausgeführt werden Durch eine JavaSkript-Pseudo-URL kann JavaSkript-Code ausgeführt werden 18 Dienstag, 9. Juli 13 18 JavaScript - Grundlagen Variablen: <script type="text/javascript"> name = "Michael Krause"; var i = j = 1 + 4; zahl = 14.59, zahl2 = Math.cos(0.75); delete name; </script> • • • • • • • Variablenname: Unicode (beginn mit $, _, Buchstaben oder Zahlen) Deklaration mit Schlüsselwort "var" (deklariert lokale Variable) Initialisierung kann zusammen mit Deklaration erfolgen. Deklarierte aber nicht initialisierte Variablen sind undefined Variablentyp wird bei der Zuweisung automatisch erkannt und verwaltet Variablen werden wenn möglich automatisch umgewandelt Löschen einer Variablen mit dem Schlüsselwort "delete" 19 Dienstag, 9. Juli 13 19 JavaScript - Grundlagen Gültigkeitsbereich: <script type="text/javascript"> gzahl = 22; // globale Variable function ausgabe() { gzahl = 33; // Zugriff auf globale Variable var gzahl = 44; // lokale Variable alert(gzahl); //Ausgabe: 44 } ausgabe(); alert(gzahl); //Ausgabe: 33 </script> • • Lokale Variablen "überschreiben" bei Deklaration globale Variablen Lokale Variablen sind innerhalb der ganzen Funktion gültig unabhängig davon wo sie definiert wurden 20 Dienstag, 9. Juli 13 20 JavaScript - Grundlagen Konstanten: <script type="text/javascript"> const var PI = 3.14159265; alert(PI); //Ausgabe: 3.14159265 </script> • • Konvention: Name in Großbuchstaben Können nicht mehr nachträglich (zur Laufzeit) geändert werden 21 Dienstag, 9. Juli 13 21 JavaScript - Grundlagen Datentypen: integer boolean float string null undefined object Ganzzahl Logischer Wert (true/false) Fließkommazahl Zeichenkette NULL (leere Variable ohne speziellen Typ) Nicht initialisierte Variable Objekt (Referenztypen: Objekte, Arrays, Funktionen) 22 Dienstag, 9. Juli 13 22 JavaScript - Grundlagen Zahlenliterale: 56.60 45 0xFF 061 Dezimal, Gleitkommawert Dezimal, Ganzzahlwert Hexadezimal Octal 23 Dienstag, 9. Juli 13 23 JavaScript - Grundlagen Vordefinierte Konstanten: Infinity Besonderer Wert für „unendlich“ NaN Besonderer Wert für „Not-a-Number“ Number.MAX_VALUE Größte darstellbare Zahl Number.MIN_VALUE Kleinste darstellbare Zahl Number.NaN Besonderer Wert für „Not-a-Number“ Number.POSITIVE_INFINITY Besonderer Wert für „unendlich“ Number.NEGATIVE_INFINITY Besonderer Wert für „negativ unendlich“ 24 Dienstag, 9. Juli 13 24 JavaScript - Grundlagen Stringliterale: "Hello" 'Hello' String in doppelten Anführungszeichen String in einfachen Anführungszeichen Stringeigenschaften: s.length; • Enthält die Länge des Strings s. 25 Dienstag, 9. Juli 13 25 JavaScript - Grundlagen Maskierte Zeichen: \' \" Anführungszeichen \0-\777 Zeichen in Octal \n Zeilenumbruch (newline) \0x-\xFF Zeichen in Hexadecimal \r Zeilenumbruch (carriage return) \\ Backslash \t Tabulator Zeilenumbrüche: \r\n Zeilenumbruch Windows \n Zeilenumbruch Unix \r Zeilenumbruch Mac 26 Dienstag, 9. Juli 13 26 JavaScript - Grundlagen Stringmanipulation: s.concat(mixed val, ...); • Verkettet mehrere Werte mit dem String s s.charAt(integer p); • Ermittelt das Zeichen an Position p der Zeichenkette s.substring(int from, [integer to]); • Gibt einen Teilstring zurück beginnend bei from bis Ende bzw. to s.substr(int from, [integer l]); • Gibt einen Teilstring zurück beginnend bei from mit einer Länge l 27 Dienstag, 9. Juli 13 27 JavaScript - Grundlagen Stringmanipulation: s.splice(int from, [integer to]); • Wie substring(), kann aber auch mit negativen Werten umgehen. s.split(string sep, [integer n]); • Zerteilt den String s an sep in ein Array (optional max. n mal). s.toLowerCase(); • Gibt eine Kopie des Strings s in Kleinbuchstaben zurück s.toUpperCase(); • Gibt eine Kopie des Strings s in Großbuchstaben zurück 28 Dienstag, 9. Juli 13 28 JavaScript - Grundlagen Stringmanipulation: s.indexOf(string a, [integer p]); • Ermittelt die Position von a im String s (optional beginnend bei p). s.lastIndexOf(string a, [integer p]); • Ermittelt die letzte Position von a im String s (optional beginnend bei p). s.match(regexp r); • Gibt einen oder mehrere Auftreten von r im String s als Array zurück. s.replace(regexp r, string c); • Ersetzt alle Vorkommen von r im String s durch c. 29 Dienstag, 9. Juli 13 29 JavaScript - Grundlagen Arrays: <script type="text/javascript"> var arr = new Array(); arr[0] = "first"; arr[1] = 508; arr[3] = true; //arr[2] = undefined <script type="text/javascript"> arr = new Object(); arr["Val1"] = "first"; arr["Val2"] = 508; arr["Val3"] = true; arr2 = new Array("first", 508, true); arr2 = new Object(); arr2.Val1 = "first"; arr2.Val2 = 508; </script> var arr3 = ["first", 508, true]; </script> indiziertes Array • • „assoziatives Array“ In JavaScript gibt es keine assoziativen Arrays Objekte können wie assoziative Arrays verwendet werden 30 Dienstag, 9. Juli 13 30 JavaScript - Grundlagen Array-Eigenschaften: a.length; • Enthält die Anzahl der Elemente im Array a. Array-Funktionen: a.join(string sep); • Setzt alle Elemente von a getrennt durch sep in einen String zusammen. a.reverse(); • Dreht die Reihenfolge der Elemente im Array a um (kein neues Array). 31 Dienstag, 9. Juli 13 31 JavaScript - Grundlagen Array-Funktionen: a.sort(); • Sortiert das Array a (erzeugt kein neues Array). a.concat(mixed b, ...); • Erzeugt ein neues Array, in dem alle Elemente zusammengesetzt wurden. a.slice(integer from, [integer to]); • Gibt ein Teilarray beginnend bei from bis Ende bzw. to zurück. a.splice(integer p, integer n, [mixed b, ...]); • Löscht n Elemente ab p und fügt neue Elemente an p in das Array a ein. 32 Dienstag, 9. Juli 13 32 JavaScript - Grundlagen Array-Funktionen: a.pop(); • Entfernt das letzte Element des Array a und gibt es zurück. a.push(mixed d, ...); • Fügt die angegebenen Elemente an das Ende des Array a an. a.shift(integer from, [integer to]); • Entfernt das erste Element des Array a und gibt es zurück. a.unshift(integer from, [mixed p, ...]); • Fügt die angegebenen Elemente am Anfang des Array a an. 33 Dienstag, 9. Juli 13 33 JavaScript - Grundlagen Konvertierung von Datentypen: <script type="text/javascript"> zahl = 1; string = zahl + ""; // Konvertierung in String (dirty) string = String(zahl); // Konvertierung in String (object) string = zahl.toString(); // Konvertierung in String (toString) zahl = string - 0; // Konvertierung in Number (dirty) zahl = parseInt(string); // Konvertierung in Integer float = parseFloat("56.33"); // Konvertierung in Float </script> • • • • Konvertierung zwischen Datentypen passiert automatisch Konvertierung in Zahlen mit parseInt() und parseFloat() Bei Konvertierung von Objekten in Strings wird toString() aufgerufen Bei Konvertierung von Objekten in Number wird valueOf() aufgerufen oder, falls nicht definiert, toString() 34 Dienstag, 9. Juli 13 34 JavaScript - Grundlagen Konvertierung von Datentypen: String Zahl Boolean Object undefined "undefined" NaN false Fehler null "null" 0 false Fehler "" - 0 false String String - parsed value or NaN true String 0 "0" - false Number NaN "NaN" - false Number infinity "Infinity" - true Number -infinity "-Infinity" - true Number Number parsed value - true Number true "true" 1 - Boolean false "false" 0 - Boolean object toString() valueOf() or toString() or NaN true - 35 Dienstag, 9. Juli 13 35 JavaScript - Grundlagen Variablentypen und -zustände: <script type="text/javascript"> alert(typeof zahl); //Ausgabe: undefined zahl = 144; alert(typeof zahl); //Ausgabe: number alert(zahl instanceof Date); //Ausgabe: false </script> • • Prüfung, ob Variable einen bestimmten Typ hat mit "instanceof"-Operator Bestimmung des Datentyps mit "typeof"-Operator 36 Dienstag, 9. Juli 13 36 JavaScript - Grundlagen Arithmetische Operatoren: <script type="text/javascript"> x + y; // Addition x - y; // Subtraktion x * y; // Multiplikation x / y; // Division x % y; // Modulus (Rest der Ganzzahldivision) x++; // Inkrementation x--; // Dekrementation </script> Logische Operatoren: <script type="text/javascript"> x && y; // wahr: x UND y sind wahr x || y; // wahr: x ODER y sind wahr !x; // wahr: x ist falsch (negierter Wert) </script> 37 Dienstag, 9. Juli 13 37 JavaScript - Grundlagen Vergleichsoperatoren: <script type="text/javascript"> x == y; // Gleichheit x != y; // Ungleichheit x === y; // Identisch x !== y; // Nicht identisch x < y; // Größer als x > y; // Kleiner als x <= y; // Größer als oder gleich x >= y; // Kleiner als oder gleich </script> 38 Dienstag, 9. Juli 13 38 JavaScript - Grundlagen Zuweisungsoperatoren: <script type="text/javascript"> $x = $y; // Zuweisung $x += $y; // Hinzuaddieren einer Zahl zu $x $x -= $y; // Abzug einer Zahl von $x $x *= $y; // Vielfaches von $x $x /= $y; // Teilung von $x $x %= $y; // $x % $y und Zuweisung des Ergebnisses in $x $s += $p; // Erweiterung einer Zeichenkette </script> 39 Dienstag, 9. Juli 13 39 JavaScript - Grundlagen Weitere Funktionen: • • Mathematische Funktionen (Klasse Math) ‣ ‣ ‣ ‣ floor(), ceil(), round() cos(), exp(), pow() min(), max() random() (Zufallszahl) Datums- und Zeitfunktionen (Klasse Date) ‣ ‣ ‣ getDate(), getTime(), getDay(), getHours() setTime() parse(), UTC() 40 Dienstag, 9. Juli 13 40 JavaScript - Grundlagen Bedingungen - if/elseif/else: <script type="text/javascript"> if (test) { // Blockanweisung } else if (test2) { // Blockanweisung } else { // Blockanweisung } </script> Kurzschreibweise: <script type="text/javascript"> if (t) { r = 1; } else { r = 0; } </script> <script type="text/javascript"> r = t ? 1 : 0; </script> 41 Dienstag, 9. Juli 13 41 JavaScript - Grundlagen Bedingungen - switch/case: <script type="text/javascript"> d = new Date(); switch(d.getHours()) { case 8: alert("Guten Morgen"); break; case 9: alert("Bisschen spät heute?"); break; case 10: alert("Jetzt gibt‘s Ärger"); break; case 11: alert("Lass dich krankschreiben"); break; default: alert("Sonstwann am Tag ..."); } </script> 42 Dienstag, 9. Juli 13 42 JavaScript - Grundlagen Schleifen: <script type="text/ javascript"> while (test) { // Blockanweisung } <script type="text/ javascript"> for (var i=0;i<5;i++) { alert(i); } <script type="text/ javascript"> for (e in [0,1,2]) { // Blockanweisung } do { // Blockanweisung } while (test); </script> for (;;) { if (test) break; } </script> for (e in forms) { // Blockanweisung } </script> while-Schleife for-Schleife for/in-Schleife 43 Dienstag, 9. Juli 13 43 JavaScript - Grundlagen Funktionen: <script type="text/javascript"> function name(param, param2, ...) { // Blockanweisung return arguments[2]; } f = function(x, y) {return x*y;} alert(f(2,3)); // Ausgabe: 6 </script> • • Übergabe beliebig vieler Parameter möglich ‣ Auf überzälige Parameter kann über das Array "arguments" zugegriffen werden ‣ Nicht übergebene Parameter sind "undefined" Um die Anzahl der übergebenen Parameter, deren Default-Werte und deren Typ muss sich der Programmierer selbst kümmern und innerhalb der Funktion definierten 44 Dienstag, 9. Juli 13 44 JavaScript - Grundlagen Formulare: <head> <script type="text/javascript"> form = document.address; // Form Objekt alert(document.forms[0].elements[0].value); form.plz.value = "54321"; form.reset(); // Setzt das Formular zurück form.submit(); // Sendet das Formular </script> </head> <body> <form name="address" action="action.php" method="post"> <input name="plz" type="text" value="12345"> </form> </body> 45 Dienstag, 9. Juli 13 45 JavaScript - Grundlagen Cookies setzen: document.cookie = "name=[Name];expires=[Datum];path=[Pfad];domain=[Domain];secure" name (Pflichtfeld) Enthält Namen + Inhalt (Verbotene Zeichen: Kommas, Semikolons, Leerzeichen). URL-Kodierung des Inhalts ist sinnvoll. expires (Optional) Lebensdauer des Cookies (Cookie wird nach Ablauf gelöscht) domain (Optional) Cookie wird nur an den Server gesendet, wenn das Feld passt. Teilmatch reicht. Default: Hostname. Muss mindestens 3 Punkte enthalten. path (Optional) Pfad der URL (nach Domain). Cookie wird nur an den Server gesendet, wenn das Feld mit der URL der Anfrage übereinstimmt secure (Optional) Cookie wird nur über HTTPS übertragen 46 Dienstag, 9. Juli 13 46 JavaScript - Grundlagen Cookies lesen: <script type="text/javascript"> var cookies = document.cookie; var pos = cookies.indexOf("version="); if (pos != -1) { var start = pos + 8; var end = cookies.indexOf(";", start); if (end == -1) end = cookies.length; var value = cookies.substring(start, end); value = decodeURIComponent(value); } </script> 47 Dienstag, 9. Juli 13 47 JavaScript - Grundlagen Ausgabe von HTML: <script type="text/javascript"> document.write("<p>Dieser Text wird angezeigt.</p>"); p = document.createElement("p"); t = document.createTextNode("Dieser Text wird angezeigt."); p.appendChild(t); table = document.createElement("table"); table.innerHTML("Dieser Text wird angezeigt."); </script> 48 Dienstag, 9. Juli 13 48 JavaScript - Grundlagen Setzen von HTML-Attributen: <head> <script type="text/javascript"> table = document.getElementsByTagName("table")[0]; table.border = 1; table.setAttribute("border", "1"); </script> </head> <body> <table border="0"> <tr><td>Zelle1</td></tr> </table> </body> 49 Dienstag, 9. Juli 13 49 JavaScript - Grundlagen Setzen von CSS-Eigenschaften: <head> <script type="text/javascript"> table = document.getElementsByTagName("table")[0]; table.style.border = 1; table.style.left = 300 + "px"; </script> </head> <body> <table border="0"> <tr><td>Zelle1</td></tr> </table> </body> 50 Dienstag, 9. Juli 13 50 JavaScript - Grundlagen Übungen: 1. Bitten Sie mit Hilfe einer Dialogbox, um eine Bestätigung vor dem Absenden des Formulars. 2. Validieren Sie das Formular mit Hilfe von regular expressions. Zeigen Sie eine Fehlermeldung am Kopf des Dokumentes an, falls die Eingabe nicht valide ist. 3. Färben Sie den Hintergrund des Elements, das einen nicht validen Inhalt hat. 51 Dienstag, 9. Juli 13 51