Medien Consulting & Services
3. Neue Javascript Funktionen in HTML5
Genau wie bei CSS3 sind die neuen APIs in einzelne Module aufgeteilt. Zu den wichtigsten neuen Modulen gehören folgende:
• Web Storage
Daten direkt im Browser speichern http://www.w3.org/TR/webstorage/
• Indexed Database API
Speichern umfangreicherer Daten im Browser http://www.w3.org/TR/IndexedDB/
• Geolocation API
Ermöglicht das Abrufen von Geodaten aus dem Gerät oder Browser http://www.w3.org/TR/geolocation-API/
• Drag & Drop
http://www.w3.org/TR/html5/dnd.html
• File API – Directories and System / Writers Dateien und Verzeichnisse lesen
http://www.w3.org/TR/FileAPI/
http://www.w3.org/TR/file-writer-api/
http://www.w3.org/TR/file-system-api/
• Web Notifications
Erlaubt die Darstellung einfacher Benachrichtigungen http://www.w3.org/TR/notifications/
• Web Workers
Hintergrundaufgaben für Webanwendungen im Browser ausführen http://www.w3.org/TR/workers/
• WebSocket API
Zweiwege-Kommunikation mit einem Remote Host via Sockets http://www.w3.org/TR/workers/
• DeviceOrientation Event
Ermöglicht die Erfassung physikalischer Richtungs und Beschleunigungsinformationen eines Gerätes
http://www.w3.org/TR/orientation-event/
Den Status der verschiedenen JavaScript APIs findet man unter http://www.w3.org/standards/
techs/js#w3c_all
Sven Brencher
Medien Consulting & Services
52 / 56
3.1. Web Storage
Mit Web Storage kann man Daten im Browser speichern, die zu einem späteren Zeitpunkt innerhalb einer Session oder auch nach beenden des Browsers wieder abgerufen werden können.
3.1.1. localStorage Objekte
Der localStorage bleibt bestehen und wird nicht gelöscht, wenn der Anwender den Browser bzw. das Tab schließt. Ein solches localStorage Objekt ist sehr einfach erstellt und wieder ausgelesen:
<script>
localStorage.nachname="Brencher";
document.write(localStorage.nachname);
</script>
Eine Funktion, die speichert, wie oft der Besucher bereits die Seite aufgerufen hat würde folgendermaßen aussehen.
<script>
if (localStorage.besuchszaehler) { localStorage.besuchszaehler=Number(
localStorage.besuchszaehler) +1;
document.write("Vielen Dank für Ihren " + localStorage.besuchszaehler+".ten Besuch.");
} else
{ localStorage.besuchszaehler=1;
document.write("Herzlich willkommen!");
}</script>
3.1.2. sessionStorage Objekte
Die Handhabung der sessionStorage Objekte ist identisch mit dem localStorage Objekt. Allerdings ist dieses Objekt gelöscht, wenn der Anwender den Browser oder das Tab schließt.
<script>
sessionStorage.nachname="Brencher";
document.write(sessionStorage.nachname);
</script>
Sven Brencher
Medien Consulting & Services
53 / 56
3.1.3. Web Storage verwalten
Mit den Methoden getItem('key') setItem('key', 'value'), removeItem('key') und clear() können Web Storage Objekte verwaltet werden. Generell wird Web Storage einer Domäne zugeordnet. Verschiedene Webdokumente können innerhalb der Domäne auf die gleichen Objekte zugreifen.
Mit dieser Schaltfläche lässt sich das Web Storage Objekt löschen:
<input id="clearBtn" type="button" value="clear"
onclick="localStorage.clear();
window.location.reload();">
Über die Eigenschaften length lässt sich die Anzahl der Elemente auslesen.
Die Methode key(i:int) gibt einen String zurück, der den Namen des Elementes enthält (nicht den Wert).
sessionStorage.setItem('email', 'info@inlite.de');
sessionStorage.length; // gibt in diesem Fall 1 zurück sessionStorage.key(0); // gibt 'email' zurück
sessionStorage.getItem('email'); // info@inlite.de sessionStorage.removeItem('email'); // Element löschen sessionStorage.clear(); // löscht alle Einträge
3.1.4. Web Storage Ereignisse
Bei einer Änderung des localStorage Objektes über eine der oben genannten Methoden werden in anderen Tabs oder Browserfenstern Ereignisse ausgegeben. Darüber lassen sich die Werte synchronisieren oder der alte und neue Wert vergleichen.
<button onclick="localStorage.setItem('Zugriff', Number(localStorage.Zugriff)+1)">Change</button>
<button onclick="localStorage.clear()">Clear</button>
<script>
localStorage.setItem('Zugriff', '1');
var storageHandler = function (storageEvent) { alert('Die Eigenschaft '
+ storageEvent.key
+ ' wurde aktualisiert. Statt ' + storageEvent.oldValue
+ ' ist der neue Wert jetzt: ' + storageEvent.newValue);
}; window.addEventListener('storage', storageHandler);
</script>
LocalStorage und SessionStorage Keys und Values können im Chrome Browser über Darstellung > Entwickler > Entwickler-Tools > Resources eingesehen werden.
Die Dokumente müssen zum Testen der Ereignisse auf einem Webserver liegen. Lokal wird das Ereignis nicht ausgegeben!
Sven Brencher
Medien Consulting & Services
54 / 56
3.2. Geolocation
Mit der Geolocation API lassen sich die Ortsangaben zu einem Gerät darstellen. In Verbindung mit einer Google Map lassen sich so Ortsbestimmungen auf einer Karte darstellen. Diese Funktion ist besonders in mobilen Browsern sehr interessant.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
var geoCall = function(position) { var latLong = new google.maps.LatLng(
position.coords.latitude, position.coords.longitude);
var optionen = { center: latLong,
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP };
var karte = new google.maps.Map(
document.getElementById("kartenCanvas"), optionen
);
var marker = new google.maps.Marker({
position: latLong,
<div id="kartenCanvas" style="width:100%;
height:100%"></div>
<script>
if (navigator.geolocation) { var nav = navigator.geolocation.
watchPosition(geoCall);
} </script> Mehr Infos dazu unter http://code.google.com/apis/
maps/documentation/javascript/
tutorial.html
Die coords Eigenschaft enthält folgende Werte: lässt sich der Zeitpunkt der Abfrage bestimmen.
geolocation.getCurrentPosition() ruft die Daten nur ein einziges mal ab.
Sven Brencher
Medien Consulting & Services
55 / 56
3.3. Drag & Drop
Bilder und Texte im Browser per Drag und Drop bewegen oder Inhalte vom Desktop auf die Webseite ziehen. Der umgekehrte Weg um Inhalte vom Browser auf den Desktop zu ziehen wird momentan nur von Google Chrome unterstützt.
Erlauben, dass ein Element gezogen werden darf:
<img src="icon.png" draggable="true">
3.3.1. Drag und Drop im Browser
Bei einem Drag und Drop treten folgende Ereignisse auf, die einzeln abgerufen werden können:
• dragstart
• drag
• dragenter
• dragleave
• dragover
• drop
• dragend
Für die Drag und Drop Aktion wird ein dataTransfer Objekt erstellt. Dieses beinhaltet das zu ziehende Element und die Daten. Es wird beim dragstart Ereignis erstellt und wird beim drop Ereignis wieder ausgelesen.
Während des Ziehens, kann statt der abgedimmten Browserversion mit der Methode setDragImage() auch ein Icon dargestellt werden. Die Methode setDate(format, data) legt fest von welchem Typ das gezogene Element ist und welche Daten es enthält.
Die dropEffect Eigenschaft gibt an ob der Browser eine passende
Visualisierung für eine Bewegung (move), einen Kopiervorgang (copy) oder eine Verknüpfung (link) darstellt. Die Eigenschaft effectAllowed definiert den Typ des Drag und Drop Vorganges. Zur Verfügung stehen copy, copyLink, copyMove, link, linkMove, all und uninitialized.
<script>
var dragIcon = document.createElement('img');
dragIcon.src = 'dragIcon.png';
document.addEventListener('dragstart', function(e) { e.dataTransfer.setData('text/plain', 'Hallo');
e.dataTransfer.setDragImage(dragIcon, -10, -10);
e.dataTransfer.dropEffect='copy';
e.dataTransfer.effectAllowed = 'copy';
}, false);
</script>
Sven Brencher
Medien Consulting & Services
56 / 56
3.3.2. Das Drop Ereignis
Wenn das Objekt wieder losgelassen wird, dann wird ein dragend Ereignis losgelassen. Soll ein anderes Element das Objekt entgegennehmen, dann muss dieses Element auf das drop Ereignis warten. Damit ein drop Ereignis ausgelöst werden kann, müssen die dragenter und dragover Ergebnisse gecancelt werden. Ansonsten verhindern diese das drop Ereignis.
Das folgende Beispiel könnte eine Warenkorbunktion sein, bei der man Produktbilder in einen Warenkorb ziehen kann.
<img src="icon.png" draggable="true"
ondragstart="dragStartHandler(event)">
<div id="dropTarget"
ondragenter="cancel(event)"
ondragover="cancel(event)"
ondrop="dropHandler(event)"></div>
<script>
function cancel(event) { event.preventDefault();
}function dragStartHandler(event) {
var data = event.dataTransfer.setData('text/plain', event.target.src);
event.dataTransfer.dropEffect='copy';
event.dataTransfer.effectAllowed = 'copy';
}function dropHandler(event) {
var data = event.dataTransfer.getData('text/plain');
var image = document.createElement('img');
image.setAttribute('src', data) event.target.appendChild(image) }</script>