JavaScript - auf Matthias

Transcrição

JavaScript - auf Matthias
Netzprogrammierung
Mobiler Code
Robert Tolksdorf und Peter Löhr
Überblick
1. Eingebetter Code
2. Javascript
3. AJAX
Robert Tolksdorf und Peter Löhr
4
11
35
2
Klientenseitige Verarbeitung
• „Dynamischer Inhalt“ kann auch bedeuten, dass eine an
den Klienten gelieferte HTML-Seite Code enthält (oder
auf Code verweist), der vom Browser - oder einem
geeigneten Plugin des Browsers - auszuführen ist.
Schlagwort: Dynamisches HTML.
• Motivation: Eingabe-Überprüfung, visuelle Effekte,
animierte Seiten, effiziente graphische Interaktion,
Anpassung an die lokale Plattform.
• Zwei Techniken für solchen mobilen Code:
• eingebetteter Skript-Code:
• nachzuladender Code:
<script ....> ..... </script>
<object ...> ..... </object>
• Sicherheitsproblematik von mobilem Code:
Code aus möglicherweise dubioser Quelle wird
ausgeführt -> Gefahr von Trojanischen Pferden!
Robert Tolksdorf und Peter Löhr
3
In HTML eingebetteter Code
Robert Tolksdorf und Peter Löhr
Einbettung von Skript-Code
HTML-Elemente für eingebetteten Code - Beispiel:
<html>
.....
<script type="text/vbscript">
..................
VBScript Code
</script>
.....
<noscript><br>Cannot execute VBScript!</noscript>
.....
Wird ausgegeben, wenn der Browser die
gewünschte Skriptsprache nicht unterstützt.
(siehe HTML-Spezifikation [ http://www.w3.org/TR/html4/ ] Kap. 18)
Robert Tolksdorf und Peter Löhr
5
Gemischte Sprachen
<html>
<head>
<META http-equiv="Content-Script-Type" content="text/vbscript">
.....
Gilt für gesamtes Dokument.
</head>
Voreinstellung ist "text/javascript".
<body>
.....
<script type="text/javascript">
..................
</script>
.....
<script>
..................
</script>
.....
Robert Tolksdorf und Peter Löhr
JavaScript Code
VBScript Code
6
Skript-Code als Ziel eines Verweises
Ein HTML-Verweis (link, A element, tag <a> ) kann sich
auch auf Skript-Code beziehen:
<html>
.....
Unsere Gesch&auml;ftsbedingungen finden Sie
<a href="http://www.dot.com/agb.html">hier.</a>
<br><br>
Unsere Coldline erreichen Sie
<a href="mailto:[email protected]">hier.</a>
Wenn Sie Ihren Namen eingeben wollen <br><br>
<a href="javascript: var name = prompt('Name:','');
if(name=='') ..... ">hier.</a>
.....
</html>
Robert Tolksdorf und Peter Löhr
7
GUI-Interaktion
Skript-Code kann auch auf andere Weise auf vom Benutzer
ausgelöste Ereignisse (intrinsic events) reagieren. Beispiel:
<html>
<head>
<script>
function check() { ..... }
</script>
</head>
<body>
.....
<input type="button" name="checkButton" value="check input"
onclick=" check(); " >
.....
Auch hier beliebiger Skript-Code!
Robert Tolksdorf und Peter Löhr
8
Ereignis-Attribute
•
•
•
•
•
•
•
•
onclick
ondblclick
onmouseover
onmouseout
onfocus
onblur
onsubmit
.....
Für jedes HTML-Element kommt eine gewisse
Auswahl aus diesen Ereignissen in Frage.
Robert Tolksdorf und Peter Löhr
9
Dynamisches Verhalten ...
... ist nicht an GUI-Elemente gebunden!
<html<body>
<p onclick="firstChild.nodeValue = 'pong' ">
ping
<br>
pong
</p>
</body></html>
Beim Anklicken von ping oder pong
wird ping durch pong ersetzt.
(Siehe auch S. 23ff.)
Hintergrund: objektbasierte Repräsentation des Dokumentinhalts
gemäß dem Document Object Model (DOM) - siehe unten.
Robert Tolksdorf und Peter Löhr
10
JavaScript
https://developer.mozilla.org/en/JavaScript
http://www.ecma-international.org/publications/standards/Ecma-262.htm
Robert Tolksdorf und Peter Löhr
Einschlägige Skript-Sprachen
• Typische Sprachen für eingebetteten Skript-Code in HTML:
• JavaScript mit Varianten
• ECMAScript
• Jscript
• JScript.NET
(Microsoft)
(Microsoft)
• VBScript
• Tcl
• Flash
• JavaScript wird von fast allen Browsern unterstützt!
• Flash ist attraktiv für Graphik/Animation
Robert Tolksdorf und Peter Löhr
12
JavaScript
• JavaScript ist keine Java-Variante!
• Mehrparadigmensprache:
• objektorientiert mit Prototypen statt Klassen
• funktional (beeinflusst durch Scheme, Self, Smalltalk, ...)
• ausgeführt durch einen Interpretierer im Browser
• kann umgehen mit Elementen des Dokuments und des
umgebenden Browser-Fensters, ferner mit Ereignissen
• auch auf der Server-Seite einsetzbar („SSJS“)
• Meilensteine und Implementierungen:
• JavaScript (1995): Netscape/Sun
• ECMAScript: ECMA (European Computer Manufacturers
Association)
• JScript: Microsoft
• Seit Version 1.5: Orientierung an DOM (Document Object
Model): standardisierte Repräsentation des Dokumentinhalts
Robert Tolksdorf und Peter Löhr
13
Ein erstes Beispiel
<html><head>
<script> function action() {
document.write("<br><font size=3 color='red'>");
document.write("<b>autsch!<\/b> <\/font> ") }
</script>
</head>
<body>
<br>Dies ist
<script> document.write("ein Test:<br><br>")
</script>
<input type="button" name="button" value="dr&uuml;ck mich!"
onclick=" action() " >
<br><br>Nein,
<a href="javascript: alert('aua!') ">mich!</a>
</body>
</html>
Achtung: bei Skript-Fehlern schlechte oder
gar keine Fehlermeldungen!
Robert Tolksdorf und Peter Löhr
14
Daten in JavaScript
• dynamisch getypt (wie andere Skriptsprachen auch) mit
•
•
•
•
•
•
•
Zahlen, z.B. 4711 3.14 -1
Zeichenketten, z.B. 'bobcat' "Bob's cat" 'Bob\'s cat\n‘
Wahrheitswerte: true false
Objekte, z.B. { re: 3.14, im: 0 }
Felder (sind auch Objekte), z.B. [4711, "4711", false] .
Reguläre Ausdrücke (sind auch Objekte), z.B. /ab*c/
Funktionen ! (siehe unten)
• Variablenvereinbarung:
• ohne Initialisierung:
• mit Initialisierung:
var age;
(Wert ist undefined !)
var age = 23; (ohne var: global!)
• Konstanten:
const host = "localhost";
• Ausdrücke: ungefähr wie in Java
Robert Tolksdorf und Peter Löhr
15
Anweisungen in JavaScript
• Einfache Anweisungen:
• Zuweisung: V = E ;
• return [ E ] ;
• Zusammengesetzte Anweisungen:
• wie in Java; zusätzlich:
• for ( [ var ] variable in object ) statement
iteriert über Attributnamen (property names) eines Objekts
• for each ( [ var ] variable in object ) statement
iteriert über Attributwerte (property values) eines Objekts
• with (object) statement (vgl. Pascal)
erlaubt in statement die Bezugnahme auf Attributnamen
des Objekts ohne vorangestellten Objektbezeichner
• Ausnahmebehandlung: ähnlich Java
Robert Tolksdorf und Peter Löhr
16
Funktionen in JavaScript
• ... sind Werte - wie in funktionalen Sprachen
• function ( parameters ) { statements }
•
•
•
•
•
•
ist eine Prozedur/Funktionsprozedur mit lokalen Variablen
Parameter: Wertübergabe, keine Typangabe
function sqr(x) { return x*x; } ist Abkürzung für
const sqr = function(x) { return x*x; }
Einschlägige Funktionale ab Version 1.6 verfügbar, z.B.
map(sqr, [1,2,3]) == [1,4,9]
Variable Parameterlisten, Bezugnahme mit arguments[i],
arguments.length
eval("string") interpretiert den als Zeichenkette
übergebenen JavaScript Code (vgl. Lisp!)
viele Standardfunktionen: parseInt, String, .....
Robert Tolksdorf und Peter Löhr
17
Objekte in JavaScript
• Prototyp-Objekte statt Klassen
•
•
•
•
Eigenschaften, Attribute (properties)
Komponenten (sub-objects)
Methoden (methods)
Ereignisse (events)
• Erzeugung mit Funktion als Konstruktor, z.B.
function Complex(re, im) { this.re = re; this.im = im; }
const notpi = new Complex(3.14, x);
(vgl. Beta)
• Somit Funktionsname als Ersatz für Klassenname!
• ... oder kürzer mit Wertbezeichner in { }:
const notpi = { re: 3.14, im: x }
• Die Eigenschaften sind auch als Tabelle (assoziatives
Feld) ansprechbar:
notpi.re == notpi["re"]
Robert Tolksdorf und Peter Löhr
18
Methoden von Objekten
• Methoden können als Funktionen dem Konstruktor
übergeben oder auch dynamisch (!) an ein Objekt
gebunden werden. Der Methodenname kann ad hoc
eingeführt werden! Beispiel:
object.method1 = somefunction;
object.method1(...);
// binding
// invocation
Die Funktion bezieht sich mittels this auf das Objekt.
• Funktionen sind selbst wiederum Objekte.
• Objektmodell ist extrem reichhaltig und flexibel.
• Zum JavaScript-Experten wird man nicht an einem Tag.
Robert Tolksdorf und Peter Löhr
19
Vordefinierte Objekte
• Sprachbezogene Objekte:
• Number, Boolean, String, Array
• Date, Math
• Vom Browser bereitgestellte Objekte; diese bilden eine
Baustein-Hierarchie (containment, aggregation) z.B.
• window repräsentiert Browser-Fenster und enthält Objekte
frame, document, ...
• document repräsentiert das im Fenster gezeigt Dokument
und enthält forms, images, ...
• Ein form-Objekt repräsentiert ein HTML-Formular und
enthält elements verschiedener HTML-Typen wie text,
button, submit, .....
• .....
Robert Tolksdorf und Peter Löhr
20
vereinfachte Objekthierarchie
(aus http://www.comptechdoc.org/independent/web/cgi/javamanual/javaobjheir.html )
Robert Tolksdorf und Peter Löhr
21
Objektbaum
• Alle HTML-Elemente, Attribute und Texte eines Dokuments
sind als Knoten eines Objektbaums repräsentiert und
haben Eigenschaften und Methoden des Prototyps node.
• Typische Eigenschaften:
• childNodes: Feld der Kindknoten
• nodeName: Marke eines Elements, z.B. A für <a ..>..</a>
• Typische Methoden:
• appendChild(node) hängt angegebenen Knoten an
• removeChild(node) entfernt angegebenen Knoten
• deleteData(from,length) löscht Teil eines Attribut- oder
Textwerts
• Beachte: Jede Änderung am Objektbaum hat eine
entsprechende Änderung der Darstellung zur Folge!
Robert Tolksdorf und Peter Löhr
22
Objekt window
• ... repräsentiert das Browser-Fenster, in dem der
JavaScript Code abläuft. Beachte: statt window.xyz
kann man auch self.xyz oder xyz schreiben.
• Typische Eigenschaft:
• status: Inhalt der Statuszeile (unten); kann beliebig
gesetzt werden!
• Typische Komponente:
• document: das im Fenster gezeigte Dokument (s.u.)
• Typische Methoden:
• alert(warning) öffnet Extrafenster mit Warnungstext
• confirm(question) öffnet Extrafenster mit ja/nein-Frage
und liefert true/false entsprechend der Benutzerreaktion
• back() geht zur letzten Seite zurück
• open(URI, name) öffnet ein neues Fenster
Robert Tolksdorf und Peter Löhr
23
Objekt document
• ... repräsentiert das im Browser-Fenster gezeigte HTMLDokument mit allen seinen Elementen.
• Typische Eigenschaft:
• bgColor: Hintergrundfarbe, z.B. "#FFFFFF" (weiß) oder "red"
• Typische Komponente:
• forms: Feld mit allen Formularen des Dokuments
• Typische Methoden:
•
•
•
•
open()/close() öffnet/schließt das Dokument zum Schreiben
write(string) schreibt HTML-Text string ins Dokument
leert Schreibpuffer und schließt das Dokument
getElementById(string) liefert das HTML-Element
<... id="string" ...>
• createElement(string) HTML-Element erzeugen, z.B. mit
dem string "h3" ein Überschrift-Element <h3> </h3>
Robert Tolksdorf und Peter Löhr
24
Prototyp form
• Beachte: form ist prototypisches Objekt für alle Objekte,
die ein HTML-Formular repräsentieren. Dagegen ist
document.forms das Feld aller Formulare im Dokument.
• <form name="myform" action="mailto:[email protected]"
onsubmit="Rumpf einer anonymen Boole‘schen Funktion">
(Ergebnis bestimmt, ob die Aktion ausgeführt wird)
• Typische Eigenschaften:
• action: die action des Formulars, z.B. wie in
document.forms[0].action == mailto:[email protected]
• method: die beim Abschicken der eingetragenen Werte zu
verwendende Methode, z.B. wie in
document.forms[0].method = "post";
• name: der Name des Formulars, z.B. wie oben "myform"
Robert Tolksdorf und Peter Löhr
25
Prototyp form
• Einzige Komponente:
• elements: Feld der in einem Formular enthaltenen Elemente,
z.B. wie in (siehe gothic.html, 12-Web-CGI, S. 30)
document.forms[0].elements[2].name == "age"
• Beachte: Wenn ein Formular im HTML-Text wie oben
benannt ist und die in ihm enthaltenen Elemente auch,
kann man mit diesen Namen auf die Elemente Bezug
nehmen.
Die folgenden Ausdrücke haben alle den Wert "age" :
• document.forms[0].elements[2].name
• document.forms[0].age.name
• document.myform.age.name
Robert Tolksdorf und Peter Löhr
26
Prototyp element
• Element eines Formulars
• Typische Eigenschaften:
• type:
• name:
• value:
gemäß <...type="type"...>
gemäß <...name="name"...>
gemäß <...value="value"...>
• Einzige Komponente - nur für Auswahllisten <select> :
• options: das Feld der Wahlmöglichkeiten
• Typische Methoden - simulieren Aktionen des Benutzers:
•
•
•
•
focus() wählt Element mit Maus
blur() annulliert Elementauswahl
select() markiert Text in ausgewähltem Textfeld
click() klickt ein clickable Element an
Robert Tolksdorf und Peter Löhr
27
Überprüfung von Formulareingaben
Zur Erinnerung:
gothic.html (12-Web-CGI, S. 28),
gothic.php (13-Web-PHP, S. 16)
.....
<FORM action="http://localhost/cgi-bin/alp5/gothic.cgi" method="GET">
First name:<INPUT type="text" name="firstname" size=10>
Last name:<INPUT type="text" name="lastname"><br>
Age:
<INPUT type="text" name="age" size=2><br>
email:
<INPUT type="text" name="email"><br>
Sex:
<INPUT type="radio" name="sex" value="Male"> male
<INPUT type="radio" name="sex" value="Female"> female
<br><br>
<INPUT type="submit" value="Send"> <INPUT type="reset">
</FORM>
.....
Robert Tolksdorf und Peter Löhr
28
Überprüfung von Formulareingaben
Zur Erinnerung:
gothic.html (12-Web-CGI, S. 28),
gothic.php (13-Web-PHP, S. 16)
<? .....
$eligible =
$sex=='Male' && $age>'70') ||
$sex=='Female' && $age>'75';
.....
?>
Wenn für age korrekt eine natürliche Zahl eingegeben
wurde, funktionieren diese Vergleiche, weil PHP für den
Vergleich die Operanden in die entsprechenden Zahlen
umwandelt! Wenn nicht, gilt z.B. 'xy'>'70' !
Robert Tolksdorf und Peter Löhr
29
Überprüfung von Formulareingaben
gothic.html mit Überprüfung der Eingabe im age-Feld:
<HTML>
<HEAD>
<SCRIPT>
function checkAge(val) {
var age = parseInt(val,10);
if (age.toString() == val && val>0 && val<200) return true;
else { document.bgColor = "red";
alert("incorrect age " + val);
document.bgColor = "white";
return false; } }
</SCRIPT>
</HEAD>
<BODY> .....
Robert Tolksdorf und Peter Löhr
30
Überprüfung von Formulareingaben
.....
<BODY>
<FORM action="http://page.mi.fu-berlin.de/lohr/php/gothic.php"
method="GET" name="form"
onSubmit="return checkAge(age.value)">
First name: <INPUT type="text" name="firstname" size=10>
Last name: <INPUT type="text" name="lastname"><br>
Age: <INPUT type="text" name="age" size=2><br>
email: <INPUT type="text" name="email"><br>
• onSubmit:
hier angegebene
Code value="Male">male
bildet den Rumpf einer
Sex:
<INPUT Der
type="radio"
name="sex"
anonymen
Boole‘schen
Methode
des Form-Objekts.
<INPUT
type="radio"
name="sex"
value="Female">female
• Er wird aktiviert, sobald das submit ansteht.
<br><br>
• Das type="submit"
submit wird nurvalue="Send">
dann ausgeführt,
wenn type="reset">
die Methode
<INPUT
<INPUT
den Wert true liefert.
</FORM>
• Dem age-Element des Formulars entspricht ein gleichnamiges
</BODY></HTML>
Komponenten-Objekt des Form-Objekts; dessen valueEigenschaft hat den im Textfeld eingetragenen value-Wert.
Robert Tolksdorf und Peter Löhr
31
Überprüfung von Formulareingaben
Robert Tolksdorf und Peter Löhr
32
Sicherheit
• Mit JavaScript Code holt man sich unbekannten Code
aus dem Netz - wie schützt man sich vor Trojanischen
Pferden?
• Sicherheitsstrategie des Browsers (security policy):
• außer Zugriffen auf das eigene Dokument wird fast nichts
erlaubt (z.B. keine Dateizugriffe).
• Ausnahme:
• Zugriff auf Ressourcen vom gleichen Server über gleichen
Port und gleiches Protokoll (mit w = window.open(URL) )
• Kontrollierte Vergabe weiterer Rechte: ähnlich Java
• Codebasis
• signierte Dokumente
• vgl. Applet-Sicherheit (15-Web-Applets, S. 32)
• MS Internet Explorer: Sicherheitszonen
• http://www.mozilla.org/projects/security/components/jssec.html
http://www.devarticles.com/c/a/JavaScript/JavaScript-Security/
Robert Tolksdorf und Peter Löhr
33
Empfehlung
Die Web-Ressourcen zur verständlichen und umfassenden
Darstellung von JavaScript und der DOM-Umgebung des
Browsers sind dünn gesät.
Eine empfehlenswerte Darstellung und Fundgrube von
instruktiven Beispielen ist
http://de.selfhtml.org/javascript/index.htm
und dort auch zu HTML und anderen Themen rund ums Web:
http://de.selfhtml.org/
(dort auch Hinweise auf diese Texte in Buchform)
Robert Tolksdorf und Peter Löhr
34
AJAX - Asynchronous JavaScript and XML
Robert Tolksdorf und Peter Löhr
HTTP-Interaktionen und GUI
• Problematik: Durch die Anfrage/Antwort-Interaktion des
HTTP wird bei jeder action ein völlig neues GUI im
Browser aufgebaut
Anfrage
GUI1
GUI2
Antwort
Client
GUI3
Anfrage
Antwort
Server
Anfrage
Antwort
Robert Tolksdorf und Peter Löhr
36
Ziel: änderbares GUI
Nur Teile des GUI sollen nach
Benutzerinteraktion mit nachgeladenen Daten geändert werden.
Robert Tolksdorf und Peter Löhr
37
AJAX
• Asynchronous JavaScript and XML (AJAX) realisiert dies
durch Kombination von
•
•
•
•
•
Präsentationssprachen XHTML und CSS
Interaktion und Modifikation im Browser mit DOM
Datenaustausch mit XML
Datentransfer durch asynchrone HTTP-Anfragen
JavaScript integriert diese Technologien
Anfrage
Antwort
GUI1
Klient
mit AJAX
Anfrage
Antwort
Anfrage
Server
Antwort
Robert Tolksdorf und Peter Löhr
38
AJAX
• JavaScript Code im Dokument kann weitere HTTP-Anfrage
starten, deren Antwort das aktuelle Dokument nicht
ersetzt, sondern nur modifiziert.
• Die Anfrage erfolgt mit Hilfe eines XMLHTTP-Objekts,
dessen Konstruktorfunktion von der Umgebung abhängt:
if (window.ActiveXObject)
// IE
http_request = new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest)
// Mozilla, Safari, ...
http_request = new XMLHttpRequest();
• Funktion f definieren, die festlegt, was beim Eintreffen
der Antwort zu tun ist, und damit:
http_request.onreadystatechange = f
Robert Tolksdorf und Peter Löhr
39
AJAX
• Asynchrone Anfrage starten:
http_request.open('GET', 'http://www.dot.com/some.file', true);
http_request.send(null);
• auch Query String statt null bei Verwendung von POST
• “beim Eintreffen der Antwort” genauer:
• http_request.readyState von 0 bis 4
• bei jeder Zustandsänderung wird die Funktion f aufgerufen
• bei Zustand 4 liegt die Antwort vollständig vor
if (http_request.readyState == 4) {
......
// response received
0 (uninitialized)
} else {
1 (loading)
......
// still not ready
2 (loaded)
}
3 (interactive)
4 (complete)
Robert Tolksdorf und Peter Löhr
40
AJAX
• HTTP-Statuscode prüfen
if (http_request.status == 200) {
.......
// perfect!
} else {
.......
// problem
// 404 (Not Found) ?
// 500 (Internal Server Error) ?
}
(Siehe
https://developer.mozilla.org/en/AJAX/Getting_Started
http://www.brainjar.com/dhtml/ajax/default2.asp )
Robert Tolksdorf und Peter Löhr
41
AJAX: Beispiel
<script>
var httpRequest;
function makeRequest(url) {
httpRequest = false;
if (window.XMLHttpRequest)
// Mozilla, Safari,...
httpRequest = new XMLHttpRequest();
else if (window.ActiveXObject)
// IE
try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) {
try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) {} }
if (!httpRequest) {
alert('Giving up: Cannot create an XMLHTTP instance');
return false; }
httpRequest.onreadystatechange = alertContents;
httpRequest.open('GET', url, true);
asynchron
httpRequest.send(null);
Query String bei POST
} // end function makeRequest
Robert Tolksdorf und Peter Löhr
42
AJAX: Beispiel
function alertContents() {
if (httpRequest.readyState == 4)
if (httpRequest.status == 200)
alert(httpRequest.responseText);
else alert('There was a problem with the request.');
}
</script>
<span
style="cursor: pointer; text-decoration: underline"
onclick="makeRequest('test.html')">
Make a request
</span>
Verbleibendes Problem: eventuelle nichtdeterministische Effekte
über die globale Variable httpRequest bei nebenläufigen
makeRequests. (Leicht behebbar - s.o. Mozilla Website.)
Robert Tolksdorf und Peter Löhr
43
AJAX: Beispiel mit XML
• test.xml:
<?xml version="1.0" ?>
<root>
I'm a test.
</root>
• Im HTML:
... onclick="makeRequest('test.xml')"> ...
• Verarbeitung in alertContents:
var xmldoc = httpRequest.responseXML;
var root_node =
xmldoc.getElementsByTagName('root').item(0);
alert(root_node.firstChild.data);
Robert Tolksdorf und Peter Löhr
44
Zusammenfassung
Robert Tolksdorf und Peter Löhr
Zusammenfassung
• Javascript
•
•
•
•
Mehrparadigmen-Sprache, eingebettet in Web-Seiten
Zugriff auf Dokumentenstruktur im Browser gemäß DOM
Ereignisgesteuerte Ausführung
Sicherheit!
• AJAX
• Dynamische Veränderung von GUI-Teilen
• ermöglicht durch asynchronen HTTP-Zugriff und
Veränderung des Dokuments
Robert Tolksdorf und Peter Löhr
46
Literatur
• St. Münz: Web-Seiten professionell erstellen (3.Aufl.). AddisonWesley 2008
(Siehe auch SelfHTML: http://www.selfhtml.org)
• D. Flanagan: JavaScript (5.ed.). O‘Reilly 2006
• Mozilla Developer Center: JavaScript.
https://developer.mozilla.org/en/JavaScript
• Mozilla Developer Center: JavaScript Security.
http://www.mozilla.org/projects/security/components/jssec.html
• Mozilla Developer Center: AJAX.
http://developer.mozilla.org/en/docs/AJAX
Robert Tolksdorf und Peter Löhr
47

Documentos relacionados