{"componentChunkName":"component---src-templates-category-template-js","path":"/category/java-script-handbuch","webpackCompilationHash":"a3ac22c47fe06e2afd02","result":{"data":{"allMarkdownRemark":{"edges":[{"node":{"html":"<p>Liebe Leserinnen und Leser,</p>\n<p>heute ist die <strong>zweite, aktualisierte und überarbeitete Auflage</strong> des <a href=\"https://www.rheinwerk-verlag.de/javascript_4459/\">JavaScript-Handbuchs</a> erschienen. Gegenüber der <a href=\"https://www.rheinwerk-verlag.de/javascript_3900/\">ersten Auflage</a> sind im Wesentlichen folgende Themen hinzugekommen:</p>\n<ul>\n<li>✅ <strong>neue ECMAScript-Features</strong> wie beispielsweise <code class=\"language-text\">async</code> und <code class=\"language-text\">await</code></li>\n<li>✅ die <strong>Web Speech API</strong>, über die Sprachausgabe und Spracherkennung möglich ist</li>\n<li>✅ die <strong>Web Animation API</strong>, über die es möglich ist, Animationen zu erstellen</li>\n<li>✅ die <strong>Command Line API</strong>, die einige nützliche Funktionen für die Ausgabe zur Verfügung stellt</li>\n<li>✅ die <strong>Internationalization API</strong>, die es erlaubt, Anwendungen mehrsprachig zu erstellen</li>\n<li>✅ <strong>Desktopanwendungen</strong> mit NW.js und Electron</li>\n</ul>\n<p>Das Buch richtet sich weiterhin an <strong>verschiedene Zielgruppen</strong>: zum einen an Leser, die generell noch überhaupt keine Programmiererfahrung haben, weder in JavaScript noch in einer anderen Programmiersprache. Diese Leser erwartet in meinem Buch neben der Einführung in JavaScript auch Hintergrundwissen zu Programmierkonzepten und -paradigmen. Unabhängig vom individuellen Hintergrundwissen erhalten Leser mit meinem Buch eine umfangreiche Einführung in die Sprache an sich, in die wichtigsten APIs und Anwendungsgebiete. Das Buch richtet sich dabei auch an Leser, die bereits Erfahrung mit JavaScript haben und diese nun vertiefen oder einfach ein zuverlässiges, umfangreiches Nachschlagewerk zur Hand haben möchten.</p>\n<p>Den <strong>Quelltext zur zweiten Auflage</strong> finden Sie weiterhin im <a href=\"https://www.rheinwerk-verlag.de/javascript_4459/\">Download-Bereich des Buches</a>. Darüber hinaus stelle ich den Quelltext aber nun auch zusätzlich über ein <a href=\"https://github.com/cleancoderocker/javascripthandbuch\">Repository bei GitHub</a> zur Verfügung. Wenn Sie bereits mit Git arbeiten, bietet es sich also an, das Repository auf Ihren Rechner zu klonen:</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">$ <span class=\"token function\">git</span> clone https://github.com/<span class=\"token operator\">&lt;</span>GIT_USERNAME<span class=\"token operator\">></span>/javascripthandbuch.git</code></pre></div>\n<p>Der Vorteil davon ist, dass Sie Aktualisierungen am Quelltext besser nachvollziehen und wie bei Git gewohnt über <code class=\"language-text\">git pull</code> entsprechend herunterladen können. Umgekehrt können Sie mir natürlich auch - für den Fall, dass Sie in einem Listing einen Fehler finden - die entsprechenden Anmerkungen als <a href=\"https://help.github.com/articles/about-pull-requests/\">Pull-Request</a> zukommen lassen. Oder Sie schreiben mir Ihre Anmerkungen an die weiterhin hierfür <a href=\"mailto:contact@javascripthandbuch.de\">vorgesehene E-Mail-Adresse</a>.</p>\n<p>Viel Spaß mit der zweiten Auflage!\nPhilip Ackermann</p>\n<!-- more -->","fields":{"categorySlug":"/category/java-script-handbuch/","slug":"/posts/javascript-handbook-edition2/"},"frontmatter":{"date":"2018-08-24T08:00:00.000Z","description":"","category":"JavaScript Handbuch","title":"Zweite Auflage"}}},{"node":{"html":"<p>In Listing 4.3 hat sich ein Fehler eingeschlichen. An den Objekten <code class=\"language-text\">x</code> und <code class=\"language-text\">y</code> wird jeweils die Eigenschaft <code class=\"language-text\">name</code> verwendet, die Konsolenausgaben greifen aber auf die Eigenschaft <code class=\"language-text\">value</code> zu.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token string\">'use strict'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">example</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    x<span class=\"token punctuation\">.</span>name <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">;</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">let</span> y <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    name<span class=\"token punctuation\">:</span> <span class=\"token number\">4711</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">example</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Damit das Listing zum Text passt, muss einheitlich die gleiche Eigenschaft verwendet werden:</p>\n<!-- more -->\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token string\">'use strict'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">example</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    x<span class=\"token punctuation\">.</span>value <span class=\"token operator\">=</span> <span class=\"token number\">5</span><span class=\"token punctuation\">;</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">let</span> y <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    value<span class=\"token punctuation\">:</span> <span class=\"token number\">4711</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token function\">example</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<hr>","fields":{"categorySlug":"/category/java-script-handbuch/","slug":"/posts/javascript-handbook/errata-object-properties"},"frontmatter":{"date":"2017-09-19T22:40:00.000Z","description":"","category":"JavaScript Handbuch","title":"Zugriff auf Objekteigenschaften in Listing 4.3"}}},{"node":{"html":"<p>Egal, ob man eine Website entwickelt, einen Webservice oder eine Desktopanwendung: immer wieder benötigt man „Dummy-Daten“, sprich Daten, die während der Entwicklung als Platzhalter dienen: sei es, damit die Anwendung sich „echter“ anfühlt oder damit ein Webservice schonmal Daten zurückliefert, auch wenn die Verbindung zur Datenbank noch nicht implementiert wurde.</p>\n<!-- more -->\n<p>Eine in diesem Zusammenhang interessante und hilfreiche Bibliothek ist <a href=\"https://github.com/marak/Faker.js/\">Faker.js</a>. Mit dieser Bibliothek lassen sich nämlich verschiedene Arten von Dummy-Daten zufällig generieren. Von Personennamen, Zahlenwerten und Datumsangaben, über E-Mail-Adressen, Domain-Namen und Passwörtern bis hin zu vollständigen Adressdaten, Produktdaten und IBAN-Nummern.</p>\n<h2 id=\"installation\"><a href=\"#installation\" aria-label=\"installation permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Installation</h2>\n<p>Faker.js kann sowohl im Browser als auch unter Node.js verwendet werden. Die Installation erfolgt dabei wahlweise über <a href=\"https://www.npmjs.com/\">NPM</a> mit dem Befehl</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">$ <span class=\"token function\">npm</span> <span class=\"token function\">install</span> faker</code></pre></div>\n<p>oder über <a href=\"https://bower.io/\">Bower</a> mit dem Befehl</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">$ bower <span class=\"token function\">install</span> facker</code></pre></div>\n<hr>\n<p><strong>Achtung</strong></p>\n<p>Bei der Installation über Bower ist allerdings darauf zu achten, <code class=\"language-text\">facker</code> tatsächlich mit <code class=\"language-text\">ck</code> zu schreiben. Der Eintrag <code class=\"language-text\">faker</code> referenziert in der Bower-Registry noch auf eine veraltete Version der Bibliothek, in der viele Funktionalitäten nicht zur Verfügung stehen.</p>\n<hr>\n<h2 id=\"verwendung\"><a href=\"#verwendung\" aria-label=\"verwendung permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Verwendung</h2>\n<p>Bei der Verwendung im Browser bindet man Faker.js nun einfach über ein entsprechendes <code class=\"language-text\">&lt;script&gt;</code>-Tag ein:</p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>bower_components/faker/build/build/faker.min.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>Bei der Verwendung unter Node.js dagegen erfolgt das Einbinden wie gewohnt über <code class=\"language-text\">require()</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> faker <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'faker'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Anschließend lässt sich die Bibliothek relativ intuitiv verwenden. Ausgangspunkt bildet das Objekt <code class=\"language-text\">faker</code>, welches über verschiedene Eigenschaften eine Reihe von Helfermethoden zur Verfügung stellt. Dazu einige Beispiele:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">let</span> randomName <span class=\"token operator\">=</span> faker<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">.</span><span class=\"token function\">findName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>             <span class=\"token comment\">// Name</span>\n<span class=\"token keyword\">let</span> randomEmail <span class=\"token operator\">=</span> faker<span class=\"token punctuation\">.</span>internet<span class=\"token punctuation\">.</span><span class=\"token function\">email</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>           <span class=\"token comment\">// E-Mail-Adresse</span>\n<span class=\"token keyword\">let</span> randomDomain <span class=\"token operator\">=</span> faker<span class=\"token punctuation\">.</span>internet<span class=\"token punctuation\">.</span><span class=\"token function\">domainName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>     <span class=\"token comment\">// Domain-Name</span></code></pre></div>\n<p>Neben den Eigenschaften <code class=\"language-text\">name</code> zur Generierung von Namen und <code class=\"language-text\">internet</code> zur Generierung von beispielsweise E-Mail-Adressen und Domain-Namen gibt es unter anderem die Eigenschaften <code class=\"language-text\">company</code> zur Generierung von Firmendaten, <code class=\"language-text\">image</code> zur Generierung von Bilddaten, <code class=\"language-text\">lorem</code> zur Generierung von lateinischen Platzhaltertexten, <code class=\"language-text\">system</code> zur Generierung von beispielsweise Dateinamen, Dateiendungen, MIME-Typen und viele, viele mehr. Eine vollständige Auflistung findet man im <a href=\"http://marak.github.io/faker.js/\">API-Browser</a> auf der Homepage der Bibliothek.</p>\n<p>*\ntl;dr: Faker.js stellt eine Reihe von Helfermethode zur Verfügung, über die sich Dummy-Daten generieren lassen. Die Bibliothek kann sowohl im Browser als auch unter Node.js verwendet werden.\n*</p>","fields":{"categorySlug":"/category/java-script-handbuch/","slug":"/posts/javascript-handbook/fakerjs/"},"frontmatter":{"date":"2017-04-27T10:02:53.000Z","description":"","category":"JavaScript Handbuch","title":"Bibliothek-Tipp"}}},{"node":{"html":"<p>Im Folgenden eine kurze Auflistung von Web APIs, die für die Webentwicklung interessant und relevant sind.</p>\n<blockquote class=\"info\">\n  <strong>Hinweis:</strong> Weitere Informationen zu Web APIs finden Sie übrigens in meinem <a href=\"pages/books\">JavaScript-Handbuch</a>.\n</blockquote>\n<!-- more -->\n<ul>\n<li><strong>Ambient Light API</strong>\nErmöglicht den Zugriff auf Informationen bezüglich des Umgebungslichts.\n<br/>Link: <a href=\"https://www.w3.org/TR/ambient-light/\">https://www.w3.org/TR/ambient-light/</a></li>\n<li><strong>Battery Status API</strong>\nErmöglicht den Zugriff auf den Batteriestand (Akkustand) eines Endgeräts.\n<br/>Link: <a href=\"https://www.w3.org/TR/battery-status/\">https://www.w3.org/TR/battery-status/</a></li>\n<li><strong>Canvas API</strong>\nErmöglicht das Zeichnen per JavaScript.\n<br/>Link: <a href=\"https://www.w3.org/TR/2dcontext/\">https://www.w3.org/TR/2dcontext/</a></li>\n<li><strong>Clipboard API</strong>\nErmöglicht den Zugriff auf die Zwischenablage.\n<br/>Link: <a href=\"https://www.w3.org/TR/clipboard-apis/\">https://www.w3.org/TR/clipboard-apis/</a></li>\n<li><strong>Command Line API</strong>\nStellt verschiedene Funktionalitäten rund um das Arbeiten mit der Entwicklerkonsole zur Verfügung.\n<br/>Link: <a href=\"https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference\">https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference</a></li>\n<li><strong>Device Orientation API</strong>\nErmöglicht das Auslesen von Informationen bezüglich der Orientierung von Endgeräten.\n<br/>Link: <a href=\"http://www.w3.org/TR/orientation-event/\">http://www.w3.org/TR/orientation-event/</a></li>\n<li><strong>Fullscreen API</strong>\nErmöglicht das Darstellen einer Webseite im Vollbildmodus.\n<br/>Link: <a href=\"https://fullscreen.spec.whatwg.org/\">https://fullscreen.spec.whatwg.org/</a></li>\n<li><strong>Gamepad API</strong>\nErmöglicht den Zugriff auf Gamepads.\n<br/>Link: <a href=\"https://www.w3.org/TR/gamepad/\">https://www.w3.org/TR/gamepad/</a>\nstatus: Working Draft</li>\n<li><strong>Geolocation API</strong>\nErmöglicht den Zugriff auf Standortinformationen.\n<br/>Link: <a href=\"http://www.w3.org/TR/geolocation-API/\">http://www.w3.org/TR/geolocation-API/</a></li>\n<li><strong>High Resolution Time API</strong>\nErmöglicht den Zugriff auf den aktuellen Zeitpunkt in einer höheren Auflösung als beispielsweise die, die für die Systemzeit verwendet wird.\n<br/>Link: <a href=\"http://www.w3.org/TR/hr-time/\">http://www.w3.org/TR/hr-time/</a></li>\n<li><strong>Indexed Database API</strong>\nErmöglicht den Zugriff auf eine clientseitige Browserdatenbank.\n<br/>Link: <a href=\"http://www.w3.org/TR/IndexedDB\">http://www.w3.org/TR/IndexedDB</a></li>\n<li><strong>Internationalization API</strong>\nErmöglicht die Internationalisierung einer Anwendung.\n<br/>Link: <a href=\"http://www.ecma-international.org/ecma-402/1.0/\">http://www.ecma-international.org/ecma-402/1.0/</a></li>\n<li><strong>Media Capture and Streams API</strong>\nDefiniert eine Schnittstelle für den Zugriff auf Mediendaten wie Audiodaten und Videodaten.\n<br/>Link: <a href=\"http://www.w3.org/TR/mediacapture-streams/\">http://www.w3.org/TR/mediacapture-streams/</a></li>\n<li><strong>Navigation Timing API</strong>\nErmöglicht den Zugriff auf verschiedenen zeitliche Informationen bei der Interaktion von Nutzern mit einer Webseite.\n<br/>Link: <a href=\"http://www.w3.org/TR/navigation-timing/\">http://www.w3.org/TR/navigation-timing/</a></li>\n<li><strong>Network Information API</strong>\nErmöglicht Zugriff auf Verbindungsinformationen eines Endgeräts.\n<br/>Link: <a href=\"http://w3c.github.io/netinfo/\">http://w3c.github.io/netinfo/</a></li>\n<li><strong>Notifications API</strong>\nErmöglicht es, Hinweismeldungen an den Nutzer zu schicken.\n<br/>Link: <a href=\"https://www.w3.org/TR/notifications/\">https://www.w3.org/TR/notifications/</a></li>\n<li><strong>Page Visibility API</strong>\nErmöglicht es, festzustellen, ob eine Webseite aktuell sichtbar ist oder nicht (beispielsweise wenn sie in einem verdeckten Tab geöffnet ist).\n<br/>Link: <a href=\"http://www.w3.org/TR/page-visibility/\">http://www.w3.org/TR/page-visibility/</a></li>\n<li><strong>Payment Request API</strong>\nVereinheitlich Bezahlprozesse auf Webseiten.\n<br/>Link: <a href=\"https://www.w3.org/TR/payment-request/\">https://www.w3.org/TR/payment-request/</a>\nstatus: Working Draft</li>\n<li><strong>Performance Timeline API</strong>\nErmöglicht Zugriff auf Informationen, um die Performance innerhalb einer Webseite zu messen.\n<br/>Link: <a href=\"http://www.w3.org/TR/performance-timeline\">http://www.w3.org/TR/performance-timeline</a></li>\n<li><strong>Presentation API</strong>\nDefiniert eine Schnittstelle für den Zugriff auf externe Präsentations-Displays wie Beamer oder Fernseher.\n<br/>Link: <a href=\"https://www.w3.org/TR/presentation-api/\">https://www.w3.org/TR/presentation-api/</a></li>\n<li><strong>Pointer Events API</strong>\nDefiniert eine einheitliche Schnittstelle für Eingabegeräte wie Maus, Stift und Touchscreen.\n<br/>Link: <a href=\"http://www.w3.org/TR/pointerevents/\">http://www.w3.org/TR/pointerevents/</a></li>\n<li><strong>Progress Events API</strong>\nDefiniert eine Schnittstelle, um auf den Fortschritt von bestimmten Prozessen zugreifen zu können. Wurde in diesem Kapitel beispielsweise verwendet, um den Fortschritt beim Lesen einer Datei zu ermitteln (siehe Unterkapitel Fehler! Verweisquelle konnte nicht gefunden werden.).\n<br/>Link: <a href=\"http://www.w3.org/TR/progress-events\">http://www.w3.org/TR/progress-events</a></li>\n<li><strong>Proximity API</strong>\nErmöglicht den Zugriff auf Angaben zu der Lage von physischen Objekten wie Endgeräten oder Nutzern.\n<br/>Link: <a href=\"http://www.w3.org/TR/proximity/\">http://www.w3.org/TR/proximity/</a></li>\n<li><strong>Resource Timing API</strong>\nErmöglicht den Zugriff auf zeitliche Informationen bezüglich der in einer Webseite eingebundenen Ressourcen, um beispielsweise zu protokollieren, wie lange das Laden einer Ressource dauert.\n<br/>Link: <a href=\"http://www.w3.org/TR/resource-timing/\">http://www.w3.org/TR/resource-timing/</a></li>\n<li><strong>Screen Orientation API</strong>\nErmöglicht den Zugriff auf Orientierungsinformationen von Endgeräten.\n<br/>Link: <a href=\"http://www.w3.org/TR/screen-orientation/\">http://www.w3.org/TR/screen-orientation/</a></li>\n<li><strong>Selection API</strong>\nErmöglicht die Selektion von Inhalten auf einer Webseite.\n<br/>Link: <a href=\"https://www.w3.org/TR/selection-api/\">https://www.w3.org/TR/selection-api/</a>\nstatus: Working Draft</li>\n<li><strong>Server-Sent Events API</strong>\nErmöglicht das Senden von Nachrichten vom Server an den Client.\n<br/>Link: <a href=\"http://www.w3.org/TR/eventsource\">http://www.w3.org/TR/eventsource</a></li>\n<li><strong>Touch Events API</strong>\nDefiniert eine Schnittstelle für den Zugriff auf Touch-Oberflächen.\n<br/>Link: <a href=\"http://www.w3.org/TR/touch-events\">http://www.w3.org/TR/touch-events</a></li>\n<li><strong>User Timing API</strong>\nErmöglicht den Zugriff auf verschiedenen zeitliche Informationen bei der Interaktion von Nutzern mit einer Webseite unter Verwendung von hochauflösenden Zeitinformationen.\n<br/>Link: <a href=\"http://www.w3.org/TR/user-timing/\">http://www.w3.org/TR/user-timing/</a></li>\n<li><strong>Vibration API</strong>\nErmöglicht es, die Vibrationsfunktion von Endgeräten zu nutzen.\n<br/>Link: <a href=\"http://www.w3.org/TR/vibration/\">http://www.w3.org/TR/vibration/</a></li>\n<li><strong>Web Animations API</strong>\nErmöglicht das Erstellen von Animationen innerhalb einer Webseite.\n<br/>Link: <a href=\"https://w3c.github.io/web-animations/\">https://w3c.github.io/web-animations/</a></li>\n<li><strong>Web Audio API</strong>\nErmöglicht das Verarbeiten und Erstellen von Audiodaten innerhalb einer Webseite.\n<br/>Link: <a href=\"https://www.w3.org/TR/webaudio/\">https://www.w3.org/TR/webaudio/</a>\nstatus: Working Draft</li>\n<li><strong>Web Bluetooth API</strong>\nErmöglicht den Zugriff auf Bluetooth-Geräte.\n<br/>Link: <a href=\"https://webbluetoothcg.github.io/web-bluetooth/\">https://webbluetoothcg.github.io/web-bluetooth/</a></li>\n<li><strong>Web Cryptography API</strong>\nErmöglicht kryptographische Operationen mit Hilfe von JavaScript.\n<br/>Link: <a href=\"https://www.w3.org/TR/WebCryptoAPI/\">https://www.w3.org/TR/WebCryptoAPI/</a></li>\n<li><strong>Web Messaging API</strong>\nDefiniert eine Schnittstelle für den Nachrichtenaustausch. Wird beispielsweise bei Server-Sent Events oder Web Sockets verwendet.\n<br/>Link: <a href=\"https://www.w3.org/TR/webmessaging/\">https://www.w3.org/TR/webmessaging/</a></li>\n<li><strong>Web Notification API</strong>\nDefiniert eine Schnittstelle für Benachrichtigungen an Nutzer.\n<br/>Link: <a href=\"http://www.w3.org/TR/notifications/\">http://www.w3.org/TR/notifications/</a></li>\n<li><strong>Web Speech API</strong>\nErmöglicht Sprachausgabe und Spracherkennung.\n<br/>Link: <a href=\"https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html\">https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html</a></li>\n<li><strong>Web Storage API</strong>\nErmöglicht den Zugriff auf einen Browserspeicher.\n<br/>Link: <a href=\"http://www.w3.org/TR/webstorage\">http://www.w3.org/TR/webstorage</a></li>\n<li><strong>Web Workers API</strong>\nErmöglicht die parallele Ausführung von JavaScript-Programmen.\n<br/>Link: <a href=\"http://www.w3.org/TR/workers\">http://www.w3.org/TR/workers</a></li>\n<li><strong>WebSocket API</strong>\nErmöglicht die bidirektionale Kommunikation zwichen Client und Server.\n<br/>Link: <a href=\"http://www.w3.org/TR/websockets\">http://www.w3.org/TR/websockets</a></li>\n</ul>","fields":{"categorySlug":"/category/java-script-handbuch/","slug":"/posts/javascript-handbook/web-apis/"},"frontmatter":{"date":"2017-04-14T17:50:00.000Z","description":"","category":"JavaScript Handbuch","title":"Übersicht Web APIs"}}},{"node":{"html":"<p>Heute wies mich ein Leser darauf hin, dass es bei dem Drag&#x26;Drop-Beispiel aus Listing 12.43 (HTML) und Listing 12.44 (JavaScript) in Firefox Probleme gibt bzw. folgender Code so nicht funktioniert:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">target<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'drop'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>id <span class=\"token operator\">===</span> <span class=\"token string\">'target'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Funktioniert nicht in Firefox</span>\n        event<span class=\"token punctuation\">.</span>srcElement<span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">+=</span> event<span class=\"token punctuation\">.</span>dataTransfer<span class=\"token punctuation\">.</span><span class=\"token function\">getData</span><span class=\"token punctuation\">(</span><span class=\"token string\">'text/html'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">onLeave</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<!-- more -->\n<p>Der Grund dafür ist, dass die Eigenschaft <code class=\"language-text\">srcElement</code> eine <a href=\"https://msdn.microsoft.com/en-us/library/ms534638.aspx\">proprietäre Eigenschaft</a> des Internet Explorers ist und daher nicht von allen Browsern unterstützt wird. Stattdessen sollte (wie im übrigen Listing auch) die Eigenschaft <code class=\"language-text\">target</code> aus dem <a href=\"https://dom.spec.whatwg.org/#dom-event-target\">DOM Standard</a> verwendet werden:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">target<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'drop'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>id <span class=\"token operator\">===</span> <span class=\"token string\">'target'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Funktioniert in Firefox und anderen Browsern</span>\n        event<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">+=</span> event<span class=\"token punctuation\">.</span>dataTransfer<span class=\"token punctuation\">.</span><span class=\"token function\">getData</span><span class=\"token punctuation\">(</span><span class=\"token string\">'text/html'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">onLeave</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Alternativ lässt sich als Fallback für ältere Internet Explorer auch die Schreibweise <code class=\"language-text\">event.target || event.srcElement</code> verwenden.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">target<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'drop'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> targetElement <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>target <span class=\"token operator\">||</span> event<span class=\"token punctuation\">.</span>srcElement<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>targetElement<span class=\"token punctuation\">.</span>id <span class=\"token operator\">===</span> <span class=\"token string\">'target'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        targetElement<span class=\"token punctuation\">.</span>innerHTML <span class=\"token operator\">+=</span> event<span class=\"token punctuation\">.</span>dataTransfer<span class=\"token punctuation\">.</span><span class=\"token function\">getData</span><span class=\"token punctuation\">(</span><span class=\"token string\">'text/html'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">onLeave</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Konsequenterweise ist es dann sinnvoll, entsprechendes Konstrukt auch in den anderen Event-Listenern zu verwenden:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">target<span class=\"token punctuation\">.</span><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">'dragenter'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> targetElement <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>target <span class=\"token operator\">||</span> event<span class=\"token punctuation\">.</span>srcElement<span class=\"token punctuation\">;</span>\n    targetElement<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token string\">'dragover'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">onLeave</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> targetElement <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>target <span class=\"token operator\">||</span> event<span class=\"token punctuation\">.</span>srcElement<span class=\"token punctuation\">;</span>\n    targetElement<span class=\"token punctuation\">.</span>classList<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"dragover\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<hr>\n<p><strong>Merke</strong></p>\n<p>Die Eigenschaft <code class=\"language-text\">srcElement</code> ist nicht im DOM Standard definiert und sollte daher nicht bzw. wenn dann nur als Fallback in Produktivsystemen verwendet werden.</p>\n<hr>","fields":{"categorySlug":"/category/java-script-handbuch/","slug":"/posts/javascript-handbook/drag-and-drop/"},"frontmatter":{"date":"2017-04-12T16:50:00.000Z","description":"","category":"JavaScript Handbuch","title":"Drag&Drop-Beispiel in Firefox"}}}]}},"pageContext":{"isCreatedByStatefulCreatePages":false,"category":"JavaScript Handbuch","currentPage":0,"postsLimit":5,"postsOffset":0,"prevPagePath":"/category/java-script-handbuch","nextPagePath":"//category/java-script-handbuch/page/1","hasPrevPage":false,"hasNextPage":true}}}