LSoM Slides - Decks by Sebastian Tramp

Transcription

LSoM Slides - Decks by Sebastian Tramp
Clientseitige
Skriptprogrammierung
Norman Heino / Sebastian Tramp
Überblick
• JavaScript
• Document Object Model (DOM)
• Ajax
• jQuery
2
Vorteile
• Entlastung des Servers
• Formularfehler können vor dem
Senden bemerkt werden
• Einfacher Dokumentzugriff über DOM
3
Nachteile
• Client potentiell unsicher
• Moglichkeit von XSS-Attacken
• Benutzer kann Skripte
kompromittieren
4
JavaScript
Geschichte von JavaScript
• 1995 – Netscape Navigator 2.0 mit
• Mocha/LiveScript
• 1995 – Umbenennung in JavaScript
• 1998 – Standardisierung (ECMA-262)
• 2000 – ECMA-262 3 Edition
rd
6
JavaScript – Einsatzgebiete
• DOM-Skripte, Browserskripte
• Ajax
• Datenbanken (MongoDB)
• Serverprogrammierung (Node.js)
• Lingua franca des Webs
7
JavaScript – Eigenschaften
• dynamisch typisiert
• objektbasiert
• keine Klassen
• funktional
• prototypische Vererbung
8
JavaScript & HTML
• Skripte müssen in HTML eingebettet
oder eingebunden werden
<script
<script type="text/javascript">
type="text/javascript">
/*
/* JavaScript-Code
JavaScript-Code */
*/
</script>
</script>
<script
<script type="text/javascript"
type="text/javascript" src="/script.js"></script>
src="/script.js"></script>
9
JavaScript – Kommentare
• einzeilig
//
// Dies
Dies ist
ist ein
ein einzeiliger
einzeiliger Kommentar
Kommentar
• mehrzeilig
/*
/* Dies
Dies ist
ist ein
ein Kommentar,
Kommentar, der
der über
über
mehrere
mehrere Zeilen
Zeilen geht
geht */
*/
10
JavaScript – Beispiele
//
// Variablen
Variablen
var
var anzahl
anzahl == 5,
5, text
text == 'Hallo
'Hallo Welt';
Welt';
//
// Funktion
Funktion
function
function hallo(name)
hallo(name) {{
alert('Hallo,
alert('Hallo, '' ++ name);
name);
}}
//
// Array
Array
var
var array
array == [1,
[1, 2,
2, 3,
3, 4,
4, 5,
5, 6];
6];
//
// Objekt
Objekt
var
var objekt
objekt == {{
name:
name: 'Norman
'Norman Heino',
Heino',
email:
email: '[email protected]'
'[email protected]'
}}
//
// Objektzugriff
Objektzugriff
alert(objekt.name);
alert(objekt.name);
alert(objekt['email']);
alert(objekt['email']);
11
JavaScript – Beispiele (2)
//
// Schleife
Schleife für
für Arrays
Arrays
for
for (var
(var ii == 0;
0; ii << array.length;
array.length; i++)
i++) {{
alert(Math.pow(2,
alert(Math.pow(2, array[i]));
array[i]));
}}
//
// Schleife
Schleife für
für
for
for (var
(var key
key in
in
alert(key
alert(key ++
}}
Objekte
Objekte
object)
object) {{
':
': '' ++ object[key]);
object[key]);
//
// Schleifen
Schleifen für
für Boole'sche
Boole'sche Bedingung
Bedingung
while
while (/*
(/* Bedingung
Bedingung */)
*/) {{
/*
/* Anweisungen
Anweisungen */
*/
};
};
do
do {{
/*
/* Anweisungen
Anweisungen */
*/
}} while
while (/*
(/* Bedingung
Bedingung */);
*/);
12
JavaScript – Eigenschaften (2)
• Variablen sind nicht typisiert (nur
Werte)
• Funktionen können in Variablen
gespeichert und als Parameter
übergeben werden
• Objektattribute können beliebige
Werte besitzen (auch Funktionen)
13
JavaScript + HTML (2)
• Verbindung zwischen HTML und
JavaScript über Ereignisse (events)
• HTML-Elemente können mit
Ereignishandlern assoziiert werden
<script
<script type="text/javascript">
type="text/javascript">
function
function sagHallo()
sagHallo() {{
alert('Hallo');
alert('Hallo');
}}
</script>
</script>
<button
<button onclick="sagHallo()">Hallo</button>
onclick="sagHallo()">Hallo</button>
14
JavaScript – Sprachobjekte
• String – Zeichenketten
• Number – Zahlen (Ganz- und Dezimal-)
• RegExp – Reguläre Ausrücke
• Array – Felder
• Math – Mathematikfunktionen
• Date – Datumsfunktionen
http://de.selfhtml.org/javascript/objekte/index.htm
15
JavaScript – Beispiele (String)
var
var text
text == 'Dies
'Dies ist
ist ein
ein Text,
Text, den
den wir
wir gleich
gleich durchsuchen
durchsuchen werden.';
werden.';
var
var
var
var
position1
position1 == text.search('gleich');
text.search('gleich');
position2
position2 == text.search('später');
text.search('später');
alert(position1);
alert(position1);
alert(position2);
alert(position2);
//
//
//
//
27
27
-1
-1
alert(text.substr(0,
alert(text.substr(0, 8));
8));
alert(text.substring(13,
alert(text.substring(13, 23));
23));
//
//
//
//
'Dies
'Dies ist'
ist'
'Text,
'Text, den'
den'
//
// Text
Text an
an Zeichen
Zeichen auftrennen
auftrennen
alert('Text
alert('Text enthält
enthält '' ++ (split(',').length
(split(',').length -- 1)
1) ++ '' Kommata.');
Kommata.');
http://de.selfhtml.org/javascript/objekte/string.htm
16
JavaScript – Beispiele (Array)
var
var array
array == ['ist',
['ist', 'ein'];
'ein'];
array.push('Array');
array.push('Array');
array.unshift('Dies');
array.unshift('Dies');
//
//
//
//
['ist',
['ist', 'ein',
'ein', 'Array']
'Array']
['Dies',
['Dies', 'ist',
'ist', 'ein',
'ein', 'Array'];
'Array'];
var
var join
join == array.join('
array.join(' ');
');
alert(join);
alert(join); //
// 'Dies
'Dies ist
ist ein
ein Array'
Array'
http://de.selfhtml.org/javascript/objekte/array.htm
17
JavaScript – Beispiele (Math)
var
var
var
var
zahl1
zahl1
zahl2
zahl2
==
==
1.23456;
1.23456;
5;
5;
alert(Math.max(zahl1,
alert(Math.max(zahl1, zahl2));
zahl2));
alert(Math.min(zahl1,
alert(Math.min(zahl1, zahl2));
zahl2));
alert(Math.round(zahl1));
alert(Math.round(zahl1));
//
//
//
//
//
//
55
1.23456
1.23456
11
alert(Math.random());
alert(Math.random()); //
// "zufällige"
"zufällige" Zahl
Zahl zwischen
zwischen 00 und
und 11
http://de.selfhtml.org/javascript/objekte/math.htm
18
JavaScript – Beispiele (Date)
var
var jetzt
jetzt == new
new Date();
Date();
alert(jetzt.getFullYear());
alert(jetzt.getFullYear());
alert(jetzt.getMonth());
alert(jetzt.getMonth());
alert(jetzt.getDate());
alert(jetzt.getDate());
alert(jetzt.getDay());
alert(jetzt.getDay());
//
//
//
//
//
//
//
//
2010
2010
12
12
10
10
55
http://de.selfhtml.org/javascript/objekte/date.htm
19
JavaScript – Browserobjekte
• window – Fensterobjekt (globales
Objekt)
• document – Document (HTML-Seite)
• forms – Formulare
• plugins – installierte Plugins (z. B.
Flash)
20
DOM – Document
Object Model
DOM – Geschichte
• 1997 – DHTML erlaubt Änderungen an
HTML-Dokument (browserspezifisch!)
• 1998 – DOM Level 1
• 2000 – DOM Level 2 (getElementById,
events)
• 2004 – DOM Level 3 (XPath)
22
DOM – Einführung
• API (application programming
interface)
• Zugriff auf Elemente von HTML- und
XML-Dokumenten über Baumstruktur
• Definiert Methoden für Elementzugriff
23
DOM – Beispiel
<table id="person_table">
<thead>
<tr>
<th>Vorname</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr class="first">
<td>Donald</td>
<td>Duck</td>
</tr>
</tbody>
</table>
http://de.wikipedia.org/wiki/Document_Object_Model
24
DOM – Traversierung
25
DOM – Knotenarten
• Dokument
• Dokumentfragment
• Elementknoten
• Attributknoten
• Textknoten (Inhalt v. Element- oder
Attributknoten)
26
DOM – Nachteile
• gesamtes Dokument muss im Speicher
gehalten werden
• Zugriff über CSS-Klasse nicht möglich
‣ Durch Frameworks (jQuery) verbessert
27
Ajax
Ajax – Begriff
• ursprünglich: AJAX – Asynchronous
JavaScript and XML
• heute: Ajax – asynchrones Nachladen
von Daten in versch. Formaten (JSON,
HTML, Text, XML, ...)
‣ Verändern der Webseite (DOM) mit
neuen Daten vom Webserver ohne
diese neu zu laden
29
30
Ajax – Architektur
31
Ajax – Architektur
32
Ajax – Architektur
33
Ajax – Technologien
• JavaScript
‧ eventgesteuerte Anfragegenerierung
• DOM
‧ dynamisches Verändern der Seite
• XMLHTTPRequest (XHR)
‧
34
Browser-Objekt für asynchrone
Anfragen
Ajax – Vorteile
• Benutzer
‧
‧ plattformunabhängig
‧ schnellere Antwortzeiten
Webanwendungen nähern sich Desktop
an
• Entwickler
‧ geringerer Ressourcenverbrauch
‧ einfachere Modularisierung
35
Ajax – Nachteile
•
•
36
Benutzer
‧ Browser-History funktioniert nicht
Deep-Links (wird z.Z. Durch fragment
‧ keine
identifier umgangen, was aber dreckig ist)
‧ Internetverbindung muss bestehen
Entwickler
‧ Unterschiede zwischen Browsern
Programmiersprachen
‧ unterschiedliche
zwischen Client und Server
Ajax – Frameworks
• Probleme bei Ajax-Entwicklung:
‧
viele
Komponenten
‧
browserspezifische Unterschiede
• Frameworks:
‧
vereinfachen
Zugriff
auf
XHR
‧
abstrahieren Browserunterschiede
37
jQuery
jQuery – Funktionalität
• Selektor-API (CSS3)
• DOM-Manipulation
• Normalisiertes Event-System
• Hilfsfunktionen
• Ajax
• Effekte, Animationen
• Erweiterbar über Plug-in-System
39
jQuery – Paradigmata
• ein jQuery-Objekt (jQuery oder $)
• Selektoren geben wieder jQuery-
Objekt zurück, das alle gefundenen
DOM-Elemente "enthält" – Chaining
• Kann mit weiteren Selektoren
verfeinert werden oder mittels Aktion
verändert werden
40
jQuery – Selektoren
• Alles – $('*')
• Tag – $('p')
• ID – $('#eine-id')
• Klasse – $('.eine-klasse')
• Attribute – $('[name]'),
$('[name="wert"]'),
$('[name!="wert"]')
41
jQuery – Traversierung
• .parent() – Elternknoten
• .parents() – Vorgänger
• .closest() – erster Vorgänger der auf
Selektor passt
• .children() – Kinder
• .next(), .nextAll(), .prev(),
.prevAll(), .siblings()
– Geschwister
http://api.jquery.com/category/traversing/
42
jQuery – Manipulation
• .addClass(), .removeClass() – CSS-Klassen
hinzufügen/entfernen
• .append(), .prepend() – Elemente/HTML
davor/danach einfügen
• .height(), .width() – Höhe/Breite
auslesen/setzen
• .html(), .text(), .val() – Elemente, Textinhalt,
value-Attribut auslesen/setzen
43
jQuery – Vorgehen
•
Event: $(document).ready(function () {/* ... */}) –
ausgeführt sobald Dokument vollständig
geladen
•
Innerhalb dann:
‧ Elemente selektieren
‐
‐
‐
44
für Events registrieren
Plug-ins benutzen
Events starten
jQuery – Beispiele
//
// Selektoren
Selektoren
$('#person_table').parent('div').hide();
$('#person_table').parent('div').hide();
//
// Manipulation
Manipulation
$('#person_table').find('tr.first').append(
$('#person_table').find('tr.first').append(
'<a
'<a class="my_button">Button</a>');
class="my_button">Button</a>');
//
// CSS-Eigenschaften
CSS-Eigenschaften ändern
ändern
$('#my_button').css('font-color',
$('#my_button').css('font-color', 'red');
'red');
//
// Events
Events
$('#my_button').click(function
$('#my_button').click(function ()
() {{
//
// $(this)
$(this) ist
ist der
der geklickte
geklickte Button
Button
alert('Schaltfläche
alert('Schaltfläche wurde
wurde geklickt');
geklickt');
});
});
//
// Inhalt
Inhalt per
per Ajax
Ajax laden
laden
$('#update-element').load('http://example.com/getData');
$('#update-element').load('http://example.com/getData');
45
jQuery – Ajax
//
// Ajax
Ajax mit
mit Callback
Callback
$.get(url,
$.get(url, parameter,
parameter, function
function (data)
(data) {{
/*
/* data
data verarbeiten
verarbeiten */
*/
});
});
//
// Ajax
Ajax mit
mit Callback
Callback und
und JSON-Daten
JSON-Daten
$.getJSON(url,
$.getJSON(url, parameter,
parameter, function
function (data)
(data) {{
/*
/* data
data verarbeiten
verarbeiten */
*/
});
});
http://api.jquery.com/jQuery.get/
46