aboutsummaryrefslogtreecommitdiff
path: root/files/de/mozilla/add-ons/webextensions
diff options
context:
space:
mode:
Diffstat (limited to 'files/de/mozilla/add-ons/webextensions')
-rw-r--r--files/de/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.html133
-rw-r--r--files/de/mozilla/add-ons/webextensions/api/browseraction/index.html135
-rw-r--r--files/de/mozilla/add-ons/webextensions/api/browseraction/setpopup/index.html136
-rw-r--r--files/de/mozilla/add-ons/webextensions/api/commands/index.html83
-rw-r--r--files/de/mozilla/add-ons/webextensions/api/downloads/index.html123
-rw-r--r--files/de/mozilla/add-ons/webextensions/api/index.html51
-rw-r--r--files/de/mozilla/add-ons/webextensions/api/lesezeich/index.html121
-rw-r--r--files/de/mozilla/add-ons/webextensions/arbeiten_mit_taps_api/index.html608
-rw-r--r--files/de/mozilla/add-ons/webextensions/beispiele/index.html22
-rw-r--r--files/de/mozilla/add-ons/webextensions/browser_support_for_javascript_apis/index.html15
-rw-r--r--files/de/mozilla/add-ons/webextensions/deine_erste_weberweiterung/index.html155
-rw-r--r--files/de/mozilla/add-ons/webextensions/deine_zweite_erweiterung/index.html357
-rw-r--r--files/de/mozilla/add-ons/webextensions/extending_the_developer_tools/index.html143
-rw-r--r--files/de/mozilla/add-ons/webextensions/index.html86
-rw-r--r--files/de/mozilla/add-ons/webextensions/manifest.json/commands/index.html184
-rw-r--r--files/de/mozilla/add-ons/webextensions/manifest.json/devtools_page/index.html42
-rw-r--r--files/de/mozilla/add-ons/webextensions/manifest.json/index.html105
-rw-r--r--files/de/mozilla/add-ons/webextensions/manifest.json/theme/index.html1361
-rw-r--r--files/de/mozilla/add-ons/webextensions/match_patterns/index.html430
-rw-r--r--files/de/mozilla/add-ons/webextensions/what_are_webextensions/index.html24
20 files changed, 4314 insertions, 0 deletions
diff --git a/files/de/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.html b/files/de/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.html
new file mode 100644
index 0000000000..04bd9d08b5
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/anatomy_of_a_webextension/index.html
@@ -0,0 +1,133 @@
+---
+title: Aufbau einer WebExtension
+slug: Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension
+translation_of: Mozilla/Add-ons/WebExtensions/Anatomy_of_a_WebExtension
+---
+<div>{{AddonSidebar}}</div>
+
+<p>Eine Extension (Erweiterung) beinhaltet eine Sammlung von Dateien, gepackt für die Verbreitung and Installation. In diesem Artikel, gehen wir kurz auf Dateien ein, die vorhanden sein könnten.</p>
+
+<h2 id="manifest.json">manifest.json</h2>
+
+<p>"manifest.json" ist die einzige Datei, die in jeder Extension vorhanden sein muss. Sie enthält die grundlegenden Metadaten wie Name, Version und benötigte Genehmigungen. Außerdem verweist sie auf andere Dateien der Extension.</p>
+
+<p>Dieses Manifest kann auch Zeiger zu mehreren anderen Dateitypen haben:</p>
+
+<ul>
+ <li><a href="/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Background_scripts">Hintergrundseiten</a>: führen Langzeitprozesse aus</li>
+ <li>Icons für die Extension und jegliche Buttons können festgelegt werden.</li>
+ <li><a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Sidebars_popups_options_pages">Sidebars, Pop-ups und Options-Pages</a>: HTML-Dokumente, die Inhalte für unterschiedliche Komponenten der Benutzeroberfläche bereitstellen.</li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Content_scripts">Content-Scripts</a>: JavaScript in Ihrer Erweiterung, das in Webseiten eingefügt wird.</li>
+</ul>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/13669/webextension-anatomy.png" style="display: block; height: 581px; margin-left: auto; margin-right: auto; width: 600px;"></p>
+
+<p>Für weitere Einzelheiten gehe auf <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">manifest.json</a>.</p>
+
+<p>Neben den vom Manifest referenzierten Seiten, kann eine Extension zusätzlche <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Extension_pages">Extension pages</a> mit unterstützenden Dateien enthalten.</p>
+
+<h2 id="Hintergrundskripte">Hintergrundskripte</h2>
+
+<p>Extensions müssen oft langzeitig ihren Zustand aufrechterhalten oder Operationen, unabhängig der Lebensdauer von irgendwelchen speziellen Webseiten oder Browserfenstern, durchführen. Dafür gibt es Hintergrundskripte (background scripts).</p>
+
+<p>Hintergrundskripte werden geladen, sobald die Extension geladen ist und laufen bis die Extension deaktiviert oder deinstalliert wird. Du kannst alles aus den <a href="/en-US/Add-ons/WebExtensions/API">WebExtension APIs</a> im Skript benutzen, solange du die notwendigen <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">Berechtigungen</a> abgefragt hast.</p>
+
+<h3 id="Hintergrundskripte_festlegen">Hintergrundskripte festlegen</h3>
+
+<p>Du kannst ein Hintergrundskript einbinden in dem du den <code>background</code>-Key in "manifest.json" benutzt:</p>
+
+<pre class="brush: json">// manifest.json
+
+"background": {
+ "scripts": ["background-script.js"]
+}</pre>
+
+<p>Du kannst mehrere background scripts angeben: wenn du sie im selben Kontext laufen lässt, so wie mehrere Skripts, die in eine einzelne Seite geladen werden.</p>
+
+<h3 id="Hintergrundskript-Umgebung">Hintergrundskript-Umgebung</h3>
+
+<h4 id="DOM_APIs">DOM APIs</h4>
+
+<p>Hintergrundskripte laufen im Rahmen spezieller Seiten genannt 'background pages' (Hintergrundseiten). Diese geben ihnen ein globales <code><a href="/en-US/docs/Web/API/Window">window</a></code>, samt der vollständigen Standard DOM APIs, die von diesem Objekt bereitgestellt werden.</p>
+
+<p>Du musst deine Hintergrundseite nicht bereitstellen. Wenn du dein Hintergrundskript hinzufügst, wird eine leere Hintergrundseite für dich erstellt.</p>
+
+<p>Dennoch kannst du deine Hintergrundseite auch als separate HTML-Datei erstellen:</p>
+
+<pre class="brush: json">// manifest.json
+
+"background": {
+ "page": "background-page.html"
+}</pre>
+
+<h4 id="WebExtension_APIs">WebExtension APIs</h4>
+
+<p>Hintergrundskripte können alles aus den <a href="/en-US/Add-ons/WebExtensions/API">WebExtension APIs</a> im Skript nutzen, solange deren Extension die notwendigen <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">Berechtigungen</a> hat.</p>
+
+<h4 id="Cross-origin_access">Cross-origin access</h4>
+
+<p>Hintergrundskripte können XHR-Anfragen an alle Hosts machen, für die sie <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">host permissions</a> haben.</p>
+
+<h4 id="Web_content">Web content</h4>
+
+<p>Hintergrundskripte haben keinen direkten Zugriff auf Webseiten. Sie können jedoch <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts">Content-Scripts</a> in Webseiten laden und <a href="/en-US/Add-ons/WebExtensions/Content_scripts#Communicating_with_background_scripts">mit ihnen über message-passing API kommunizieren</a>.</p>
+
+<h4 id="Content_security_policy">Content security policy</h4>
+
+<p>Hintergrundskripte sind beschränkt in einigen potenziell gefährlichen Operationen, wie dem Benutzen von <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval">eval()</a></code>, durch ein Sicherheitskonzept. Für mehr Informationen siehe <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy">Content Security Policy</a>.</p>
+
+<h2 id="Sidebars_Pop-ups_Options-Pages">Sidebars, Pop-ups, Options-Pages</h2>
+
+<p>Deine Extension kann unterschiedliche Benutzeroberflächenkomponenten enthalten, deren Inhalt wird durch ein HTML-Dokument festgelegt:</p>
+
+<ul>
+ <li>eine <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Sidebars">Sidebar</a> ist ein Element, das auf der linken Seite des Browserfensters neben der Webseite angezeigt wird</li>
+ <li>ein <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Popups">Pop-up</a> ist ein Dialogfenster, dass du anzeigen kannst, wenn der Benutzer auf einen <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_action">Button der Werkzeugleiste</a> oder der <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Page_actions">Adressleiste </a>klickt</li>
+ <li>eine <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Options_pages">Options-Page</a> ist eine Seite, die gezeigt wird, wenn der Benutzer deine Add-on-Einstellungen im browser-eigenen Add-ons-Manager abruft.</li>
+</ul>
+
+<p>Für jeden dieser Komponenten, erstellst du eine HTML-Datei und verweist auf sie über ein spezielles Attribut in <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">manifest.json</a>. Die HTML-Datei kann, wie eine normale Webseite, CSS- und JavaScript-Dateien einbinden.</p>
+
+<p>Sie alle sind Arten von <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Extension_pages">Extension pages</a>, und nicht wie eine normale Webseite, dein JavaScript kann dieselben WebExtension APIs wie dein Hintergrundskript benutzen. Sie können sogar direkt Variabeln aus der Hintergrundseite, mit {{WebExtAPIRef("runtime.getBackgroundPage()")}}, abrufen.</p>
+
+<h2 id="Extension_pages">Extension pages</h2>
+
+<p>Du kannst außerdem HTML-Dokumente in deine Extension mit einbeziehen, die nicht vordefinierten Benutzeroberflächenkomponenten beigefügt wurden. Anders als die Dokumente, die du für Sidebars, Pop-ups, oder Option-Pages bereitstellen könntest, haben diese keinen Zugang zu "manifest.json". Dennoch haben sie Zugriff auf dieselben WebExtension APIs wie dein Hintergrundskript.</p>
+
+<p>Du lädst eine solche Seite normalerweise mit {{WebExtAPIRef("windows.create()")}} oder {{WebExtAPIRef("tabs.create()")}}.</p>
+
+<p>Siehe <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Extension_pages">Extension pages</a> um mehr zu lernen.</p>
+
+<h2 id="Content_scripts">Content scripts</h2>
+
+<p>Benutze Content-Scripts um Webseiten abzurufen und zu manipulieren. Content-Scripts werden in Webseiten geladen und laufen im Rahmen der jeweiligen Seite.</p>
+
+<p>Content-Scripts sind von der Erweiterung bereitgestellte Skripts, die im Kontext einer Webseite laufen; das unterscheidet sie von Skripts, die von der Seite selber geladen werden, einschließlich derer, die in {{HTMLElement("script")}}-Elementen innerhalb der Seite bereitgestellt werden.</p>
+
+<p>Content-Scripts können das Seiten-DOM sehen und manipulieren, so wie normale, von der Seite geladene Skripte.</p>
+
+<p>Im Gegensatz zu normalen Skripten können sie:</p>
+
+<ul>
+ <li>domainübergreifende XHR-Anfragen machen.</li>
+ <li>eine kleine Teilmenge der <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API">WebExtension APIs</a> benutzen.</li>
+ <li>Nachrichten mit ihren Hintergrundskripten austauschen und auf diesem Web indirekt die gesamten WebExtension APIs abrufen.</li>
+</ul>
+
+<p>Content-Scripts können nicht direkt normale Skripte der Seite abrufen, aber mit ihnen Nachrichten austauschen über die übliche <code><a href="/en-US/docs/Web/API/Window/postMessage">window.postMessage()</a></code> API.</p>
+
+<p>Wenn wir gewöhnlich über Content-Scripts sprechen, dann im Bezug auf JavaScript. Du kannst jedoch auch CSS zu einer Webseite über das selbe System hinzufügen.</p>
+
+<p>Sieh dir <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts">content scripts</a> an um mehr zu erfahren.</p>
+
+<h2 id="Web_accessible_resources">Web accessible resources</h2>
+
+<p>Zugängliche Webressourcen(Web accessible resources) sind Ressourcen wie Bilder, HTML, CSS, und JavaScript, die du in die Extension einbindest und für Content-Scripts und Skripten der Seite zugänglich machen möchtest. Ressourcen, die web-zugänglich gemacht werden, können von Skripten der Seite und Content-Scripts über ein spezielles URI-Schema referenziert werden.</p>
+
+<p>Wenn zum Beispiel ein Content-Script Bilder in eine Webseite einfügen will, kannst du sie in der Extension beifügen und web-zugänglich machen. Dann könnte das Content-Script <code><a href="/en-US/docs/Web/HTML/Element/img">img</a></code>-Tags erzeugen und hinzufügen, die über das <code>src</code>-Attribut auf die Bilder verweisen.</p>
+
+<p>Um mehr zu lernen, sieh die Dokumentation für den <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources">web_accessible_resources</a> manifest.json key.</p>
+
+<p> </p>
+
+<p> </p>
diff --git a/files/de/mozilla/add-ons/webextensions/api/browseraction/index.html b/files/de/mozilla/add-ons/webextensions/api/browseraction/index.html
new file mode 100644
index 0000000000..184dccf3d6
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/api/browseraction/index.html
@@ -0,0 +1,135 @@
+---
+title: browserAction
+slug: Mozilla/Add-ons/WebExtensions/API/browserAction
+tags:
+ - API
+ - Add-ons
+ - Extensions
+ - Interface
+ - NeedsTranslation
+ - Non-standard
+ - Reference
+ - TopicStub
+ - WebExtensions
+ - browserAction
+translation_of: Mozilla/Add-ons/WebExtensions/API/browserAction
+---
+<div>{{AddonSidebar}}</div>
+
+<p>Adds a button to the browser's toolbar.</p>
+
+<p>A <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_action">browser action</a> is a button in the browser's toolbar.</p>
+
+<p>You can associate a popup with the button. The popup is specified using HTML, CSS and JavaScript, just like a normal web page. JavaScript running in the popup gets access to all the same WebExtension APIs as your background scripts, but its global context is the popup, not the current page displayed in the browser. To affect web pages you need to communicate with them via <a href="/en-US/Add-ons/WebExtensions/Modify_a_web_page#Messaging">messages</a>.</p>
+
+<p>If you specify a popup, it will be shown — and the content will be loaded — when the user clicks the icon. If you do not specify a popup, then when the user clicks the icon an event is dispatched to your extension.</p>
+
+<p>You can define most of a browser action's properties declaratively using the <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action">browser_action</a></code> key in the manifest.json.</p>
+
+<p>With the <code>browserAction</code> API, you can:</p>
+
+<ul>
+ <li>use {{WebExtAPIRef("browserAction.onClicked")}} to listen for clicks on the icon.</li>
+ <li>get and set the icon's properties — icon, title, popup, and so on. You can get and set these globally across all tabs, or for a specific tab by passing the tab ID as an additional argument.</li>
+</ul>
+
+<h2 id="Types">Types</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("browserAction.ColorArray")}}</dt>
+ <dd>An array of four integers in the range 0-255 defining an RGBA color.</dd>
+ <dt>{{WebExtAPIRef("browserAction.ImageDataType")}}</dt>
+ <dd>Pixel data for an image. Must be an <code><a href="/en-US/docs/Web/API/ImageData">ImageData</a></code> object (for example, from a {{htmlelement("canvas")}} element).</dd>
+</dl>
+
+<h2 id="Functions">Functions</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("browserAction.setTitle()")}}</dt>
+ <dd>Sets the browser action's title. This will be displayed in a tooltip.</dd>
+ <dt>{{WebExtAPIRef("browserAction.getTitle()")}}</dt>
+ <dd>Gets the browser action's title.</dd>
+ <dt>{{WebExtAPIRef("browserAction.setIcon()")}}</dt>
+ <dd>Sets the browser action's icon.</dd>
+ <dt>{{WebExtAPIRef("browserAction.setPopup()")}}</dt>
+ <dd>Sets the HTML document to be opened as a popup when the user clicks on the browser action's icon.</dd>
+ <dt>{{WebExtAPIRef("browserAction.getPopup()")}}</dt>
+ <dd>Gets the HTML document set as the browser action's popup.</dd>
+ <dt>{{WebExtAPIRef("browserAction.openPopup()")}}</dt>
+ <dd>Open the browser action's popup.</dd>
+ <dt>{{WebExtAPIRef("browserAction.setBadgeText()")}}</dt>
+ <dd>Sets the browser action's badge text. The badge is displayed on top of the icon.</dd>
+ <dt>{{WebExtAPIRef("browserAction.getBadgeText()")}}</dt>
+ <dd>Gets the browser action's badge text.</dd>
+ <dt>{{WebExtAPIRef("browserAction.setBadgeBackgroundColor()")}}</dt>
+ <dd>Sets the badge's background color.</dd>
+ <dt>{{WebExtAPIRef("browserAction.getBadgeBackgroundColor()")}}</dt>
+ <dd>Gets the badge's background color.</dd>
+ <dt>{{WebExtAPIRef("browserAction.setBadgeTextColor()")}}</dt>
+ <dd>Sets the badge's text color.</dd>
+ <dt>{{WebExtAPIRef("browserAction.getBadgeTextColor()")}}</dt>
+ <dd>Gets the badge's text color.</dd>
+ <dt>{{WebExtAPIRef("browserAction.enable()")}}</dt>
+ <dd>Enables the browser action for a tab. By default, browser actions are enabled for all tabs.</dd>
+ <dt>{{WebExtAPIRef("browserAction.disable()")}}</dt>
+ <dd>Disables the browser action for a tab, meaning that it cannot be clicked when that tab is active.</dd>
+ <dt>{{WebExtAPIRef("browserAction.isEnabled()")}}</dt>
+ <dd>Checks whether the browser action is enabled or not.</dd>
+</dl>
+
+<h2 id="Events">Events</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("browserAction.onClicked")}}</dt>
+ <dd>Fired when a browser action icon is clicked. This event will not fire if the browser action has a popup.</dd>
+</dl>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>{{Compat("webextensions.api.browserAction")}}</p>
+
+<div class="hidden note">
+<p>The "Chrome incompatibilities" section is included from <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities"> https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities</a> using the <a href="/en-US/docs/Template:WebExtChromeCompat">WebExtChromeCompat</a> macro.</p>
+
+<p>If you need to update this content, edit <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities">https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities</a>, then shift-refresh this page to see your changes.</p>
+</div>
+
+<p>{{WebExtExamples("h2")}}</p>
+
+<div class="note"><strong>Acknowledgements</strong>
+
+<p>This API is based on Chromium's <a href="https://developer.chrome.com/extensions/browserAction"><code>chrome.browserAction</code></a> API. This documentation is derived from <a href="https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/browser_action.json"><code>browser_action.json</code></a> in the Chromium code.</p>
+
+<p>Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.</p>
+</div>
+
+<div class="hidden">
+<pre>// Copyright 2015 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+</pre>
+</div>
diff --git a/files/de/mozilla/add-ons/webextensions/api/browseraction/setpopup/index.html b/files/de/mozilla/add-ons/webextensions/api/browseraction/setpopup/index.html
new file mode 100644
index 0000000000..2a4a40e794
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/api/browseraction/setpopup/index.html
@@ -0,0 +1,136 @@
+---
+title: browserAction.setPopup()
+slug: Mozilla/Add-ons/WebExtensions/API/browserAction/setPopup
+translation_of: Mozilla/Add-ons/WebExtensions/API/browserAction/setPopup
+---
+<div>{{AddonSidebar()}}</div>
+
+<p>Sets the HTML document that will be opened as a popup when the user clicks on the browser action's icon. Tabs without a specific popup will inherit the global popup, which defaults to the <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action"><code>default_popup</code></a> specified in the manifest.</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox brush:js">browser.browserAction.setPopup(
+ details // object
+)
+</pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code>details</code></dt>
+ <dd><code>object</code>.</dd>
+ <dd>
+ <dl class="reference-values">
+ <dt><code>tabId</code>{{optional_inline}}</dt>
+ <dd><code>integer</code>. Sets the popup only for a specific tab. The popup is reset when the user navigates this tab to a new page.</dd>
+ <dt><code>windowId</code>{{optional_inline}}</dt>
+ <dd><code>integer</code>. Sets the popup only for the specified window.</dd>
+ </dl>
+
+ <dl class="reference-values">
+ <dt><code>popup</code></dt>
+ <dd>
+ <p><code>string</code> or <code>null</code>. The HTML file to show in a popup, specified as a URL.</p>
+
+ <p>This can point to a file packaged within the extension (for example, created using {{WebExtAPIRef("extension.getURL")}}), or a remote document (e.g. <code>https://example.org/</code>).</p>
+
+ <p>If an empty string (<code>""</code>) is passed here, the popup is disabled, and the extension will receive {{WebExtAPIRef("browserAction.onClicked")}} events.</p>
+
+ <p>If <code>popup</code> is <code>null</code>:</p>
+
+ <p>If <code>tabId</code> is specified, removes the tab-specific popup so that the tab inherits the global popup.</p>
+
+ <p>If <code>windowId</code> is specified, removes the window-specific popup so that the window inherits the global popup.</p>
+
+ <p>Otherwise it reverts the global popup to the default value.</p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<ul>
+ <li>If <code>windowId</code> and <code>tabId</code> are both supplied, the function fails and the popup is not set.</li>
+ <li>If <code>windowId</code> and <code>tabId</code> are both omitted, the global popup is set.</li>
+</ul>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("webextensions.api.browserAction.setPopup",2)}}</p>
+
+<h2 id="Examples">Examples</h2>
+
+<p>This code adds a pair of context menu items that you can use to switch between two popups. Note that you'll need the "contextMenus" <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permission</a> set in the extension's manifest to create context menu items.</p>
+
+<pre class="brush: js">function onCreated() {
+ if (browser.runtime.lastError) {
+ console.log("error creating item:" + browser.runtime.lastError);
+ } else {
+ console.log("item created successfully");
+ }
+}
+
+browser.contextMenus.create({
+ id: "popup-1",
+ type: "radio",
+ title: "Popup 1",
+ contexts: ["all"],
+ checked: true
+}, onCreated);
+
+browser.contextMenus.create({
+ id: "popup-2",
+ type: "radio",
+ title: "Popup 2",
+ contexts: ["all"],
+ checked: false
+}, onCreated);
+
+browser.contextMenus.onClicked.addListener(function(info, tab) {
+ if (info.menuItemId == "popup-1") {
+ browser.browserAction.setPopup({popup: "/popup/popup1.html"})
+ } else if (info.menuItemId == "popup-2") {
+ browser.browserAction.setPopup({popup: "/popup/popup2.html"})
+ }
+});</pre>
+
+<p>{{WebExtExamples}}</p>
+
+<div class="note"><strong>Acknowledgements</strong>
+
+<p>This API is based on Chromium's <a href="https://developer.chrome.com/extensions/browserAction#method-setPopup"><code>chrome.browserAction</code></a> API. This documentation is derived from <a href="https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/browser_action.json"><code>browser_action.json</code></a> in the Chromium code.</p>
+
+<p>Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.</p>
+</div>
+
+<div class="hidden">
+<pre>// Copyright 2015 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+</pre>
+</div>
diff --git a/files/de/mozilla/add-ons/webextensions/api/commands/index.html b/files/de/mozilla/add-ons/webextensions/api/commands/index.html
new file mode 100644
index 0000000000..af45cea002
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/api/commands/index.html
@@ -0,0 +1,83 @@
+---
+title: commands
+slug: Mozilla/Add-ons/WebExtensions/API/commands
+translation_of: Mozilla/Add-ons/WebExtensions/API/commands
+---
+<div>{{AddonSidebar}}</div>
+
+<p>Verwenden Sie die Ausführungsbefehle der Benutzer, die Sie mit Hilfe des <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/commands"><code>Schlüssels commands</code> der manifest.json</a> registriert haben.</p>
+
+<h2 id="Typen">Typen</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("commands.Command")}}</dt>
+ <dd>Objekt, das einen Befehl repräsentiert. Es enthält die für den Befehl im <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/commands"><code>Schlüssel commands der </code>manifest.json</a> festgelegten Informationen.</dd>
+</dl>
+
+<h2 id="Funktionen">Funktionen</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("commands.getAll")}}</dt>
+ <dd>
+ <p>Stellt alle registrierten Befehle für diese Erweiterung zur Verfügung.</p>
+ </dd>
+ <dt>{{WebExtAPIRef("commands.reset")}}</dt>
+ <dd>
+ <p>Angegebene Befehlsbeschreibung und das Tastaturkürzel auf die im Manifest-Schlüssel angegebenen Werte zurücksetzen.</p>
+ </dd>
+ <dt>{{WebExtAPIRef("commands.update")}}</dt>
+ <dd>
+ <p>Beschreibung oder Tastenkürzel des angegebenen Befehls ändern.</p>
+ </dd>
+</dl>
+
+<h2 id="Ereignisse">Ereignisse</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("commands.onCommand")}}</dt>
+ <dd>
+ <div>Wird ausgelöst, wenn ein Befehl mit Hilfe seines zugewiesenen Tastenkürzels ausgeführt wird.</div>
+ </dd>
+</dl>
+
+<h2 id="Browserkompatibilität">Browserkompatibilität</h2>
+
+<p>{{Compat("webextensions.api.commands")}} {{WebExtExamples("h2")}}</p>
+
+<div class="note"><strong>Danksagungen</strong>
+
+<p>Diese API basiert auf der API <a href="https://developer.chrome.com/extensions/commands"><code>chrome.commands</code></a> von Chromium.</p>
+
+<p>Die Kompatibilitätsdaten von Microsoft Edge werden von der Microsoft Corporation bereitgestellt und stehen hier unter der Lizenz Creative Commons Attribution 3.0 United States.</p>
+</div>
+
+<div class="hidden">
+<pre>// Copyright 2015 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+</pre>
+</div>
diff --git a/files/de/mozilla/add-ons/webextensions/api/downloads/index.html b/files/de/mozilla/add-ons/webextensions/api/downloads/index.html
new file mode 100644
index 0000000000..7363cde811
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/api/downloads/index.html
@@ -0,0 +1,123 @@
+---
+title: downloads
+slug: Mozilla/Add-ons/WebExtensions/API/downloads
+translation_of: Mozilla/Add-ons/WebExtensions/API/downloads
+---
+<div>0ü</div>
+
+<p>Enables extensions to interact with the browser's download manager. You can use this API module to download files, cancel, pause, resume downloads, and show downloaded files in the file manager.</p>
+
+<p>To use this API you need to have the "downloads" <a href="/en-US/Add-ons/WebExtensions/manifest.json/permissions#API_permissions">API permission</a> specified in your <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">manifest.json</a> file.</p>
+
+<h2 id="Types">Types</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("downloads.FilenameConflictAction")}}</dt>
+ <dd>Defines options for what to do if the name of a downloaded file conflicts with an existing file.</dd>
+ <dt>{{WebExtAPIRef("downloads.InterruptReason")}}</dt>
+ <dd>Defines a set of possible reasons why a download was interrupted.</dd>
+ <dt>{{WebExtAPIRef("downloads.DangerType")}}</dt>
+ <dd>Defines a set of common warnings of possible dangers associated with downloadable files.</dd>
+ <dt>{{WebExtAPIRef("downloads.State")}}</dt>
+ <dd>Defines different states that a current download can be in.</dd>
+ <dt>{{WebExtAPIRef("downloads.DownloadItem")}}</dt>
+ <dd>Represents a downloaded file.</dd>
+ <dt>{{WebExtAPIRef("downloads.StringDelta")}}</dt>
+ <dd>Represents the difference between two strings.</dd>
+ <dt>{{WebExtAPIRef("downloads.DoubleDelta")}}</dt>
+ <dd>Represents the difference between two doubles.</dd>
+ <dt>{{WebExtAPIRef("downloads.BooleanDelta")}}</dt>
+ <dd>Represents the difference between two booleans.</dd>
+ <dt>{{WebExtAPIRef("downloads.DownloadTime")}}</dt>
+ <dd>Represents the time a download took to complete.</dd>
+ <dt>{{WebExtAPIRef("downloads.DownloadQuery")}}</dt>
+ <dd>Defines a set of parameters that can be used to search the downloads manager for a specific set of downloads.</dd>
+</dl>
+
+<h2 id="Functions">Functions</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("downloads.download()")}}</dt>
+ <dd>Downloads a file, given its URL and other optional preferences.</dd>
+ <dt>{{WebExtAPIRef("downloads.search()")}}</dt>
+ <dd>Queries the {{WebExtAPIRef("downloads.DownloadItem", "DownloadItems")}} available in the browser's downloads manager, and returns those that match the specified search criteria.</dd>
+ <dt>{{WebExtAPIRef("downloads.pause()")}}</dt>
+ <dd>Pauses a download.</dd>
+ <dt>{{WebExtAPIRef("downloads.resume()")}}</dt>
+ <dd>Resumes a paused download.</dd>
+ <dt>{{WebExtAPIRef("downloads.cancel()")}}</dt>
+ <dd>Cancels a download.</dd>
+ <dt>{{WebExtAPIRef("downloads.getFileIcon()")}}</dt>
+ <dd>Retrieves an icon for the specified download.</dd>
+ <dt>{{WebExtAPIRef("downloads.open()")}}</dt>
+ <dd>Opens the downloaded file with its associated application.</dd>
+ <dt>{{WebExtAPIRef("downloads.show()")}}</dt>
+ <dd>Opens the platform's file manager application to show the downloaded file in its containing folder.</dd>
+ <dt>{{WebExtAPIRef("downloads.showDefaultFolder()")}}</dt>
+ <dd>Opens the platform's file manager application to show the default downloads folder.</dd>
+ <dt>{{WebExtAPIRef("downloads.erase()")}}</dt>
+ <dd>Erases matching {{WebExtAPIRef("downloads.DownloadItem", "DownloadItems")}} from the browser's download history, without deleting the downloaded files from disk.</dd>
+ <dt>{{WebExtAPIRef("downloads.removeFile()")}}</dt>
+ <dd>Removes a downloaded file from disk, but not from the browser's download history.</dd>
+ <dt>{{WebExtAPIRef("downloads.acceptDanger()")}}</dt>
+ <dd>Prompts the user to accept or cancel a dangerous download.</dd>
+ <dt>{{WebExtAPIRef("downloads.drag()")}}</dt>
+ <dd>Initiates dragging the downloaded file to another application.</dd>
+ <dt>{{WebExtAPIRef("downloads.setShelfEnabled()")}}</dt>
+ <dd>Enables or disables the gray shelf at the bottom of every window associated with the current browser profile. The shelf will be disabled as long as at least one extension has disabled it.</dd>
+</dl>
+
+<h2 id="Events">Events</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("downloads.onCreated")}}</dt>
+ <dd>Fires with the {{WebExtAPIRef("downloads.DownloadItem", "DownloadItem")}} object when a download begins.</dd>
+ <dt>{{WebExtAPIRef("downloads.onErased")}}</dt>
+ <dd>Fires with the <code>downloadId</code> when a download is erased from history.</dd>
+ <dt>{{WebExtAPIRef("downloads.onChanged")}}</dt>
+ <dd>When any of a {{WebExtAPIRef("downloads.DownloadItem", "DownloadItem")}}'s properties except <code>bytesReceived</code> changes, this event fires with the <code>downloadId</code> and an object containing the properties that changed.</dd>
+</dl>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>{{Compat("webextensions.api.downloads")}}</p>
+
+<p>{{WebExtExamples("h2")}}</p>
+
+<div class="note"><strong>Acknowledgements</strong>
+
+<p>This API is based on Chromium's <a href="https://developer.chrome.com/extensions/downloads"><code>chrome.downloads</code></a> API.</p>
+
+<p>Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.</p>
+</div>
+
+<div class="hidden">
+<pre>// Copyright 2015 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+</pre>
+</div>
diff --git a/files/de/mozilla/add-ons/webextensions/api/index.html b/files/de/mozilla/add-ons/webextensions/api/index.html
new file mode 100644
index 0000000000..1a500cdc0c
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/api/index.html
@@ -0,0 +1,51 @@
+---
+title: JavaScript APIs
+slug: Mozilla/Add-ons/WebExtensions/API
+tags:
+ - NeedsTranslation
+ - TopicStub
+ - WebExtensions
+translation_of: Mozilla/Add-ons/WebExtensions/API
+---
+<div>{{AddonSidebar}}</div>
+
+<div>
+<p>JavaScript APIs for WebExtensions can be used inside the extension's <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Background_scripts">background scripts</a> and in any other documents bundled with the extension, including <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_action">browser action</a> or <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Page_actions">page action</a> popups, <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Sidebars">sidebars</a>, <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Options_pages">options pages</a>, or <a href="/en-US/Add-ons/WebExtensions/manifest.json/chrome_url_overrides">new tab pages</a>. A few of these APIs can also be accessed by an extension's <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Content_scripts">content scripts</a> (see the <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#WebExtension_APIs">list in the content script guide</a>).</p>
+
+<p>To use the more powerful APIs you need to <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions">request permission</a> in your extension's manifest.json.</p>
+
+<p>You can access the APIs using the <code>browser</code> namespace:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">logTabs</span><span class="punctuation token">(</span>tabs<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>tabs<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+browser<span class="punctuation token">.</span>tabs<span class="punctuation token">.</span><span class="function token">query</span><span class="punctuation token">(</span><span class="punctuation token">{</span>currentWindow<span class="punctuation token">:</span> <span class="keyword token">true</span><span class="punctuation token">}</span><span class="punctuation token">,</span> logTabs<span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+</div>
+
+<div>
+<p>Many of the APIs are asynchronous, returning a <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</a></code>:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">logCookie</span><span class="punctuation token">(</span>c<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>c<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+<span class="keyword token">function</span> <span class="function token">logError</span><span class="punctuation token">(</span>e<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ console<span class="punctuation token">.</span><span class="function token">error</span><span class="punctuation token">(</span>e<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+<span class="keyword token">var</span> setCookie <span class="operator token">=</span> browser<span class="punctuation token">.</span>cookies<span class="punctuation token">.</span><span class="keyword token">set</span><span class="punctuation token">(</span>
+ <span class="punctuation token">{</span>url<span class="punctuation token">:</span> <span class="string token">"https://developer.mozilla.org/"</span><span class="punctuation token">}</span>
+<span class="punctuation token">)</span><span class="punctuation token">;</span>
+setCookie<span class="punctuation token">.</span><span class="function token">then</span><span class="punctuation token">(</span>logCookie<span class="punctuation token">,</span> logError<span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+</div>
+
+<div>
+<p>Note that this is different from Google Chrome's extension system, which uses the <code>chrome</code> namespace instead of <code>browser</code>, and which uses callbacks instead of promises for asynchronous functions. As a porting aid, the Firefox implementation of WebExtensions APIs supports <code>chrome</code> and callbacks as well as <code>browser</code> and promises. Mozilla has also written a polyfill which enables code that uses <code>browser</code> and promises to work unchanged in Chrome: <a class="external external-icon" href="https://github.com/mozilla/webextension-polyfill">https://github.com/mozilla/webextension-polyfill</a>.</p>
+
+<p>Microsoft Edge uses the <code>browser</code> namespace, but doesn't yet support promise-based asynchronous APIs. In Edge, for the time being, asynchronous APIs must use callbacks.</p>
+
+<p>Not all browsers support all the APIs: for the details, see <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs">Browser support for JavaScript APIs</a>.</p>
+</div>
+
+<div>{{SubpagesWithSummaries}}</div>
diff --git a/files/de/mozilla/add-ons/webextensions/api/lesezeich/index.html b/files/de/mozilla/add-ons/webextensions/api/lesezeich/index.html
new file mode 100644
index 0000000000..7c43bda2af
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/api/lesezeich/index.html
@@ -0,0 +1,121 @@
+---
+title: Lesezeichen
+slug: Mozilla/Add-ons/WebExtensions/API/Lesezeich.
+translation_of: Mozilla/Add-ons/WebExtensions/API/bookmarks
+---
+<div>{{AddonSidebar}}</div>
+
+<p>Die <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions">WebExtensions</a> {{WebExtAPIRef("bookmarks")}} API erlaubt es einer Erweiterung mit dem Lesezeichensystem des Browsers interagieren und dieses zu manipulieren. Sie können die API verwenden, um für Seiten Lesezeichen zu setzen, vorhandene Lesezeichen abzurufen und Lesezeichen zu bearbeiten, zu entfernen und zu organisieren.</p>
+
+<p>Um diese API zu verwenden, muss die Erweiterung die <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">Berechtigung</a> "Lesezeichen" in der <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">manifest.json</a></code> Datei besitzen.</p>
+
+<h2 id="Types">Types</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("bookmarks.BookmarkTreeNodeUnmodifiable")}}</dt>
+ <dd>Ein {{jsxref("String")}} enum, das angibt, warum ein Lesezeichen oder ein Ordner unmodifizierbar ist.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.BookmarkTreeNode")}}</dt>
+ <dd>Stellt ein Lesezeichen oder einen Ordner im Lesezeichenbaum dar.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.CreateDetails")}}</dt>
+ <dd>Enthält Informationen, die bei der Erstellung eines neuen Lesezeichens an die {{WebExtAPIRef("bookmarks.create()")}} Funktion übergeben werden.</dd>
+</dl>
+
+<h2 id="Functions">Functions</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("bookmarks.create()")}}</dt>
+ <dd>Erstellt ein Lesezeichen oder Ordner.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.get()")}}</dt>
+ <dd>Ruft eine oder mehrere {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}} ab und übergibt eine Lesezeichen-ID oder ein Array von Lesezeichen ID.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.getChildren()")}}</dt>
+ <dd>Ruft die Kinder des angegebenen {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}} ab.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.getRecent()")}}</dt>
+ <dd>Ruft eine angeforderte Anzahl von zuletzt hinzugefügten Lesezeichen ab.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.getSubTree()")}}</dt>
+ <dd>Ruft einen Teil des Lesezeichenbaums ab und beginnt am angegebenen Knoten.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.getTree()")}}</dt>
+ <dd>Ruft den gesamten Lesezeichenbaum in ein Array von {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}} Objekte auf.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.move()")}}</dt>
+ <dd>Moves the specified {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}} to a new location in the bookmark tree.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.remove()")}}</dt>
+ <dd>Removes a bookmark or an empty bookmark folder, given the node's ID.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.removeTree()")}}</dt>
+ <dd>Recursively removes a bookmark folder; that is, given the ID of a folder node, removes that node and all its descendants.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.search()")}}</dt>
+ <dd>Searches for {{WebExtAPIRef("bookmarks.BookmarkTreeNode", "BookmarkTreeNode")}}s matching a specified set of criteria.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.update()")}}</dt>
+ <dd>Updates the title and/or URL of a bookmark, or the name of a bookmark folder, given the bookmark's ID.</dd>
+</dl>
+
+<h2 id="Events">Events</h2>
+
+<dl>
+ <dt>{{WebExtAPIRef("bookmarks.onCreated")}}</dt>
+ <dd>Fired when a bookmark or folder is created.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.onRemoved")}}</dt>
+ <dd>Fired when a bookmark or folder is removed. When a folder is removed recursively, a single notification is fired for the folder, and none for its contents.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.onChanged")}}</dt>
+ <dd>Fired when a bookmark or folder changes. Currently, only <code>title</code> and <code>url</code> changes trigger this.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.onMoved")}}</dt>
+ <dd>Fired when a bookmark or folder is moved to a different parent folder or to a new offset within its folder.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.onChildrenReordered")}}</dt>
+ <dd>Fired when the user has sorted the children of a folder in the browser's UI. This is not called as a result of a {{WebExtAPIRef("bookmarks.move", "move()")}}.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.onImportBegan")}}</dt>
+ <dd>Fired when a bookmark import session is begun. Expensive observers should ignore {{WebExtAPIRef("bookmarks.onCreated")}} updates until {{WebExtAPIRef("bookmarks.onImportEnded")}} is fired. Observers should still handle other notifications immediately.</dd>
+ <dt>{{WebExtAPIRef("bookmarks.onImportEnded")}}</dt>
+ <dd>Fired when a bookmark import session has finished.</dd>
+</dl>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>{{Compat("webextensions.api.bookmarks")}}</p>
+
+<div class="hidden note">
+<p>The "Chrome incompatibilities" section is included from <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities"> https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities</a> using the <a href="/en-US/docs/Template:WebExtChromeCompat">WebExtChromeCompat</a> macro.</p>
+
+<p>If you need to update this content, edit <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities">https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities</a>, then shift-refresh this page to see your changes.</p>
+</div>
+
+<h3 id="Edge_incompatibilities">Edge incompatibilities</h3>
+
+<p>Promises are not supported in Edge. Use callbacks instead.</p>
+
+<p>{{WebExtExamples("h2")}}</p>
+
+<div class="note"><strong>Acknowledgements</strong>
+
+<p>This API is based on Chromium's <a href="https://developer.chrome.com/extensions/bookmarks"><code>chrome.bookmarks</code></a> API. This documentation is derived from <a href="https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions/api/bookmarks.json"><code>bookmarks.json</code></a> in the Chromium code.</p>
+
+<p>Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.</p>
+</div>
+
+<div class="hidden">
+<pre>// Copyright 2015 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+</pre>
+</div>
diff --git a/files/de/mozilla/add-ons/webextensions/arbeiten_mit_taps_api/index.html b/files/de/mozilla/add-ons/webextensions/arbeiten_mit_taps_api/index.html
new file mode 100644
index 0000000000..39498fa606
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/arbeiten_mit_taps_api/index.html
@@ -0,0 +1,608 @@
+---
+title: Arbeiten mit Taps API
+slug: Mozilla/Add-ons/WebExtensions/Arbeiten_mit_Taps_API
+tags:
+ - tabs
+translation_of: Mozilla/Add-ons/WebExtensions/Working_with_the_Tabs_API
+---
+<p>{{AddonSidebar}}</p>
+
+<p>Tabs lassen einen Benutzer mehrere Webseiten in seinem Browserfenster öffnen und wechseln dann zwischen diesen Webseiten. Mit der Tabs API können Sie mit diesen Tabs arbeiten und diese manipulieren, um Programme zu erstellen, die Nutzern neue Möglichkeiten bieten, mit Tabs zu arbeiten oder die Funktionen Ihrer Erweiterung zu liefern.</p>
+
+<p>In diesem "how-to"-Artikel schauen wir uns an:</p>
+
+<ul>
+ <li>Berechtigungen, die für die Verwendung der Tabs API benötigt werden.</li>
+ <li>Mehr über Tabs und ihre Eigenschaften erfahren Sie mit {{WebExtAPIRef("tabs.query")}}.</li>
+ <li>Tabs erstellen, duplizieren, verschieben, aktualisieren, neu laden und entfernen.</li>
+ <li>Manipulationen des Zoomniveaus eines Tab.</li>
+ <li>Manipulationen eines Tabs CSS.</li>
+</ul>
+
+<p>Wir schließen dann mit Blick auf einige andere, andere Funktionen, die von der API angeboten werden.</p>
+
+<div class="blockIndicator note">
+<p><strong>Hinweis:</strong> Es gibt einige Tab-API-Funktionen, die an anderer Stelle abgedeckt sind. Dies sind die Methoden, die Sie verwenden können, um den Inhalt der Registerkarten mit Skripten zu manipulieren  ({{WebExtAPIRef("tabs.connect")}},  {{WebExtAPIRef("tabs.sendMessage")}} und  {{WebExtAPIRef("tabs.executeScript")}}). Wenn Sie mehr Informationen über diese Methoden wünschen, lesen Sie die <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts">Artikelinhaltskripte</a> Concepts und die Anleitung ändern Sie<a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Modify_a_web_page">eine Webseite</a>.</p>
+</div>
+
+<p><strong>Berechtigungen und die Tabs API</strong></p>
+
+<p>Für die meisten Tabs API-Funktionen benötigen Sie keine Berechtigungen; Es gibt jedoch einige Ausnahmen:</p>
+
+<ul>
+ <li>Für den Zugriff auf die Eigenschaften <code>Tab.url</code>, <code>Tab.title </code>und <code>Tab.favIconUrl</code> des Tab-Objekts ist die Erlaubnis "Tabs" erforderlich. In Firefox benötigen Sie auch "Tabs", um eine <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query">Abfrage</a> per URL durchzuführen.</li>
+ <li><a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions#Host_permissions">Die Host-Berechtigung</a> ist für die {{WebExtAPIRef("tabs.executeScript")}} oder  {{WebExtAPIRef("tabs.insertCSS")}}. erforderlich.</li>
+</ul>
+
+<p>Im Folgenden können Sie in der manifest.json-Datei Ihrer Erweiterung die Erlaubnis "Tabs " beantragen :</p>
+
+<pre class="brush: json line-numbers language-json"><code class="language-json"><span class="property token">"permissions"</span><span class="operator token">:</span> <span class="punctuation token">[</span>
+ <span class="string token">"&lt;all_urls&gt;"</span><span class="punctuation token">,</span>
+ <span class="string token">"tabs"</span>
+<span class="punctuation token">]</span><span class="punctuation token">,</span></code></pre>
+
+<p>Diese Anfrage gibt Ihnen die Nutzung aller Tabs API-Funktion auf allen Websites, die Ihr Nutzer besucht. Es gibt auch einen alternativen Ansatz für die Anforderung von Berechtigungen zur Verwendung von {{WebExtAPIRef("tabs.executeScript")}} or {{WebExtAPIRef("tabs.insertCSS")}}, bei dem Sie keine Host-Erlaubnis benötigen, in Form von <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions#activeTab_permission">"activeTab"</a>. Diese Erlaubnis bietet die gleichen Rechte wie "Tabs" mit&lt; all _ urls &gt;,aber mit zwei Einschränkungen:</p>
+
+<ul>
+ <li>Der Benutzer muss mit der Erweiterung über seine Browser-oder Seiten-Aktion, Kontextmenü oder Tastenkombination interagieren.</li>
+ <li>Es erteilt nur die Erlaubnis innerhalb der aktiven Registerkarte.</li>
+</ul>
+
+<p>Der Vorteil dieses Ansatzes ist, dass der Benutzer keine Berechtigung erhält, die besagt, dass Ihre Erweiterung "Zugriff auf Ihre Daten für alle Websites" kann. Das liegt daran , dass &lt; all _ urls &gt; Erlaubnis einer Erweiterung die Möglichkeit gibt, Skripte in jedem Tab auszuführen, zu jeder Zeit, die sie mag, während <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions#activeTab_permission">"activeTab"</a> darauf beschränkt ist, der Erweiterung zu erlauben, eine vom Benutzer angeforderte Aktion in der Aktuelle Registerkarte.</p>
+
+<p><strong>Mehr über Tabs und ihre Eigenschaften entdecken</strong></p>
+
+<p>Es wird Gelegenheiten geben, in denen Sie eine Liste aller Tabs in allen Browser-Fenstern erhalten wollen. Zu anderen Zeiten möchten Sie vielleicht eine Untergruppe von Tabs finden, die bestimmten Kriterien entsprechen, wie zum Beispiel solchen, die von einem bestimmten Tab geöffnet werden oder Seiten aus einer bestimmten Domain anzeigen. Und wenn Sie Ihre Liste der Tabs haben, werden Sie wahrscheinlich mehr über ihre Eigenschaften wissen wollen.</p>
+
+<p>Hier kommt die {{WebExtAPIRef("tabs.query")}} in den Fall. Wird allein verwendet, um alle Tabs zu erhalten oder das queryInfo-Objekt zu nehmen —, um Abfragekriterien anzugeben, wie zum Beispiel, ob die Registerkarte im aktuellen Fenster aktiv ist, oder eines oder mehrere von 17 Kriterien —  {{WebExtAPIRef("tabs.query")}} gibt ein Array von  {{WebExtAPIRef("tabs.Tab")}} Objekte, die Informationen über die Registerkarten enthalten.</p>
+
+<p>Wenn Sie nur Informationen über den aktuellen Reiter wünschen, können Sie eine {{WebExtAPIRef("tabs.Tab")}} erhalten. Objekt für diese Registerkarte mit {{WebExtAPIRef("tabs.getCurrent")}}. Wenn Sie eine Tab-ID haben, können Sie die  {{WebExtAPIRef("tabs.Tab")}} Objekt mit {{WebExtAPIRef("tabs.get")}}.</p>
+
+<div class="blockIndicator note">
+<p><strong>notiz:</strong></p>
+
+<ul>
+ <li><strong>In Chrome</strong> kann der Benutzer mehrere Tabs in einem Fenster auswählen, und die Tabs API sieht diese als hervorgehobene Tabs.</li>
+ <li><strong>In Firefox</strong> kann der Benutzer mehrere Tabs nicht auswählen, daher sind "hervorgehoben" und "aktiv" synonym.</li>
+</ul>
+</div>
+
+<h3 id="Wie_man_mit_dem_Beispiel_geht">Wie man mit dem Beispiel geht</h3>
+
+<p>Um zu sehen, wie  {{WebExtAPIRef("tabs.query")}} und  {{WebExtAPIRef("tabs.Tab")}} werden verwendet, lassen Sie uns durch, wie  das <a href="https://github.com/mdn/webextensions-examples/tree/master/tabs-tabs-tabs">Tabs-Tabs-Tabs </a>Beispiel fügt die Liste von" Schalter auf Tabs "zu seiner Toolbar-Taste Popup.</p>
+
+<p><a href="https://mdn.mozillademos.org/files/15723/Switch_to_tab.png"><img alt="" src="https://mdn.mozillademos.org/files/15723/Switch_to_tab.png" style="height: 645px; width: 369px;"></a></p>
+
+<h3 id="manifest.json"><strong>manifest.json</strong></h3>
+
+<p>Hier ist das <a href="https://github.com/mdn/webextensions-examples/blob/master/tabs-tabs-tabs/manifest.json">manifest.json</a>:</p>
+
+<pre class="brush: json line-numbers language-json"><code class="language-json"><span class="punctuation token">{</span>
+ <span class="property token">"browser_action"</span><span class="operator token">:</span> <span class="punctuation token">{</span>
+ <span class="property token">"browser_style"</span><span class="operator token">:</span> <span class="boolean token">true</span><span class="punctuation token">,</span>
+ <span class="property token">"default_title"</span><span class="operator token">:</span> <span class="string token">"Tabs, tabs, tabs"</span><span class="punctuation token">,</span>
+ <span class="property token">"default_popup"</span><span class="operator token">:</span> <span class="string token">"tabs.html"</span>
+ <span class="punctuation token">}</span><span class="punctuation token">,</span>
+ <span class="property token">"description"</span><span class="operator token">:</span> <span class="string token">"A list of methods you can perform on a tab."</span><span class="punctuation token">,</span>
+ <span class="property token">"homepage_url"</span><span class="operator token">:</span> <span class="string token">"https://github.com/mdn/webextensions-examples/tree/master/tabs-tabs-tabs"</span><span class="punctuation token">,</span>
+ <span class="property token">"manifest_version"</span><span class="operator token">:</span> <span class="number token">2</span><span class="punctuation token">,</span>
+ <span class="property token">"name"</span><span class="operator token">:</span> <span class="string token">"Tabs, tabs, tabs"</span><span class="punctuation token">,</span>
+ <span class="property token">"permissions"</span><span class="operator token">:</span> <span class="punctuation token">[</span>
+ <span class="string token">"tabs"</span>
+ <span class="punctuation token">]</span><span class="punctuation token">,</span>
+ <span class="property token">"version"</span><span class="operator token">:</span> <span class="string token">"1.0"</span>
+<span class="punctuation token">}</span></code></pre>
+
+<div class="blockIndicator note">
+<p>Hinweis:</p>
+
+<ul>
+ <li><strong>Tabs.html wird als Standard </strong><strong>_ Popup in</strong> browser<strong> _ </strong><strong>action</strong><strong>definiert.</strong>Es wird angezeigt, wenn der Benutzer auf das Symbollei-Symbol der Erweiterung klickt.</li>
+ <li><strong>Die Berechtigungen beinhalten Registerkarten. </strong>Dies ist notwendig, um die Tabelliste zu unterstützen, da die Erweiterung den Titel der Registerkarten für die Anzeige im Popup liest.</li>
+</ul>
+</div>
+
+<h3 id="Tabs.html">Tabs.html</h3>
+
+<p>Tabs.html definiert den Inhalt des Popups der Erweiterung:</p>
+
+<pre class="brush: html line-numbers language-html"><code class="language-html"><span class="doctype token">&lt;!DOCTYPE html&gt;</span>
+
+<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>html</span><span class="punctuation token">&gt;</span></span>
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>head</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>meta</span> <span class="attr-name token">charset</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>utf-8<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>link</span> <span class="attr-name token">rel</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>stylesheet<span class="punctuation token">"</span></span> <span class="attr-name token">href</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>tabs.css<span class="punctuation token">"</span></span><span class="punctuation token">/&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>head</span><span class="punctuation token">&gt;</span></span>
+
+<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>body</span><span class="punctuation token">&gt;</span></span>
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>div</span> <span class="attr-name token">class</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>panel<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>div</span> <span class="attr-name token">class</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>panel-section panel-section-header<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>div</span> <span class="attr-name token">class</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>text-section-header<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>Tabs-tabs-tabs<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>div</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>div</span><span class="punctuation token">&gt;</span></span>
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>a</span> <span class="attr-name token">href</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>#<span class="punctuation token">"</span></span> <span class="attr-name token">id</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>tabs-move-beginning<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>Move active tab to the beginning of the window<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>a</span><span class="punctuation token">&gt;</span></span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>br</span><span class="punctuation token">&gt;</span></span>
+
+
+…
+
+Define the other menu items
+…
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>div</span> <span class="attr-name token">class</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>switch-tabs<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>p</span><span class="punctuation token">&gt;</span></span>Switch to tab<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>p</span><span class="punctuation token">&gt;</span></span>
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>div</span> <span class="attr-name token">id</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>tabs-list<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>div</span><span class="punctuation token">&gt;</span></span>
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>div</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>div</span><span class="punctuation token">&gt;</span></span>
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>script</span> <span class="attr-name token">src</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>tabs.js<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>script</span><span class="punctuation token">&gt;</span></span>
+
+<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>body</span><span class="punctuation token">&gt;</span></span>
+
+<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>html</span><span class="punctuation token">&gt;</span></span></code></pre>
+
+<p>Hier ist eine Zusammenfassung der oben genannten tut:</p>
+
+<ol>
+ <li>Die Menüpunkte werden deklariert.</li>
+ <li>Ein leerer <code>Div </code>mit der ID-<code>Tabs-Liste</code> wird deklariert, um die Liste der Tabs zu enthalten.</li>
+ <li>Tabs.js heißt.</li>
+</ol>
+
+<h3 id="Tabs.js">Tabs.js</h3>
+
+<p>In <a href="https://github.com/mdn/webextensions-examples/blob/master/tabs-tabs-tabs/tabs.js">tabs.js</a>werdenwir sehen, wie die Liste der Tabs aufgebaut und zum Popup hinzugefügt wird.  </p>
+
+<p><strong>Das Popup schaffen</strong></p>
+
+<p>Zunächst wird ein Event-Handler hinzugefügt, um ListTabs () auszuführen , wenn tabs.html geladen wird:</p>
+
+<pre>document.addEventListener ("DOMContentLoaded", hört Tabs);</pre>
+
+<p>Das erste, was <code>listTabs ()</code> tut, ist <code>getCurrentWindowTabs ()</code>zu nennen. Hier wird ein {{WebExtAPIRef("tabs.query")}} verwendet, um eine  {{WebExtAPIRef("tabs.Tab")}} zu erhalten. Objekt für die Tabs im aktuellen Fenster:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">getCurrentWindowTabs</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">return</span> browser<span class="punctuation token">.</span>tabs<span class="punctuation token">.</span><span class="function token">query</span><span class="punctuation token">(</span><span class="punctuation token">{</span>currentWindow<span class="punctuation token">:</span> <span class="boolean token">true</span><span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span></code></pre>
+
+<p>Jetzt ist <code>listTabs()</code> bereit , den Inhalt für das Popup zu erstellen.</p>
+
+<p>Zunächst:</p>
+
+<ol>
+ <li>Schnappen Sie sich die <code>tabs-list div</code>.</li>
+ <li>Erstellen Sie ein Dokumentenfragment (in das die Liste eingebaut wird).</li>
+ <li>Setzen Sie Zähler.</li>
+ <li>Klären Sie den Inhalt der <code>Tabs-Liste div</code>.</li>
+</ol>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">listTabs</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> getCurrentWindowTabs</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">.</span><span class="function token">then</span><span class="punctuation token">(</span><span class="punctuation token">(</span><span class="parameter token">tabs</span><span class="punctuation token">)</span> <span class="operator token">=&gt;</span> <span class="punctuation token">{</span>
+ <span class="keyword token">let</span> tabsList <span class="operator token">=</span> document<span class="punctuation token">.</span><span class="function token">getElementById</span><span class="punctuation token">(</span><span class="string token">'tabs-list'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="keyword token">let</span> currentTabs <span class="operator token">=</span> document<span class="punctuation token">.</span><span class="function token">createDocumentFragment</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="keyword token">let</span> limit <span class="operator token">=</span> <span class="number token">5</span><span class="punctuation token">;</span>
+ <span class="keyword token">let</span> counter <span class="operator token">=</span> <span class="number token">0</span><span class="punctuation token">;</span>
+
+ tabsList<span class="punctuation token">.</span>textContent <span class="operator token">=</span> <span class="string token">''</span><span class="punctuation token">;</span></code></pre>
+
+<p>Als nächstes werden wir die Links für jeden Tab erstellen:</p>
+
+<ol>
+ <li>Schleifen Sie sich durch die ersten 5 Elemente aus der   {{WebExtAPIRef("tabs.Tab")}} Objekt.</li>
+ <li>Fügen Sie für jeden Artikel einen Hyperlink zum Dokumentenfragment hinzu.
+ <ul>
+ <li>Das Etikett des Links — das heißt, sein Text — wird mit dem Titel des Tab gesetzt (oder mit der ID, wenn er keinen Titel hat).</li>
+ <li>Die Adresse des Links wird mit der Personalausweis des Tabs gesetzt.</li>
+ </ul>
+ </li>
+</ol>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"> <span class="keyword token">for</span> <span class="punctuation token">(</span><span class="keyword token">let</span> tab <span class="keyword token">of</span> tabs<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">if</span> <span class="punctuation token">(</span><span class="operator token">!</span>tab<span class="punctuation token">.</span>active <span class="operator token">&amp;&amp;</span> counter <span class="operator token">&lt;=</span> limit<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">let</span> tabLink <span class="operator token">=</span> document<span class="punctuation token">.</span><span class="function token">createElement</span><span class="punctuation token">(</span><span class="string token">'a'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+ tabLink<span class="punctuation token">.</span>textContent <span class="operator token">=</span> tab<span class="punctuation token">.</span>title <span class="operator token">||</span> tab<span class="punctuation token">.</span>id<span class="punctuation token">;</span>
+
+ tabLink<span class="punctuation token">.</span><span class="function token">setAttribute</span><span class="punctuation token">(</span><span class="string token">'href'</span><span class="punctuation token">,</span> tab<span class="punctuation token">.</span>id<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ tabLink<span class="punctuation token">.</span>classList<span class="punctuation token">.</span><span class="function token">add</span><span class="punctuation token">(</span><span class="string token">'switch-tabs'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ currentTabs<span class="punctuation token">.</span><span class="function token">appendChild</span><span class="punctuation token">(</span>tabLink<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+
+ counter <span class="operator token">+=</span> <span class="number token">1</span><span class="punctuation token">;</span>
+
+ <span class="punctuation token">}</span></code></pre>
+
+<p>Schließlich wird das Dokumentenfragment auf die Tabs-Liste div geschrieben:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"> tabsList<span class="punctuation token">.</span><span class="function token">appendChild</span><span class="punctuation token">(</span>currentTabs<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span></code></pre>
+
+<p><strong>Arbeiten mit dem aktiven Reiter</strong></p>
+
+<p>Ein weiteres verwandtes Beispielmerkmal ist die Info-Option "Alert active tab", die alle Registerkarten [{WebExtAPIRef ("-Register) ablegt. Tab ")} Objekteigenschaften für die aktive Registerkarte in einen Alarm:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"> <span class="keyword token">else</span> <span class="keyword token">if</span> <span class="punctuation token">(</span>e<span class="punctuation token">.</span>target<span class="punctuation token">.</span>id <span class="operator token">===</span> <span class="string token">"tabs-alertinfo"</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> callOnActiveTab</span><span class="punctuation token">(</span><span class="punctuation token">(</span><span class="parameter token">tab</span><span class="punctuation token">)</span> <span class="operator token">=&gt;</span> <span class="punctuation token">{</span>
+ <span class="keyword token">let</span> props <span class="operator token">=</span> <span class="string token">""</span><span class="punctuation token">;</span>
+ <span class="keyword token">for</span> <span class="punctuation token">(</span><span class="parameter token"><span class="keyword token">let</span> item <span class="keyword token">in</span> tab</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ props <span class="operator token">+=</span> <span class="template-string token"><span class="string token">`</span><span class="interpolation token"><span class="interpolation-punctuation punctuation token">${</span> item <span class="interpolation-punctuation punctuation token">}</span></span><span class="string token"> = </span><span class="interpolation token"><span class="interpolation-punctuation punctuation token">${</span> tab<span class="punctuation token">[</span>item<span class="punctuation token">]</span> <span class="interpolation-punctuation punctuation token">}</span></span><span class="string token"> \n`</span></span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+<span class="function token"> alert</span><span class="punctuation token">(</span>props<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span></code></pre>
+
+<p>Wobei <code>callOnActiveTab() </code>das aktive Tab-Objekt findet, indem man sich durch die Registerkarten {{WebExtAPIRef("tabs.Tab")}} schlodert. Tab ")} Objekte, die nach dem Gegenstand mit aktivem Satz suchen:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js">document<span class="punctuation token">.</span><span class="function token">addEventListener</span><span class="punctuation token">(</span><span class="string token">"click"</span><span class="punctuation token">,</span> <span class="keyword token">function</span><span class="punctuation token">(</span><span class="parameter token">e</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">function</span> <span class="function token">callOnActiveTab</span><span class="punctuation token">(</span><span class="parameter token">callback</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> getCurrentWindowTabs</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">.</span><span class="function token">then</span><span class="punctuation token">(</span><span class="punctuation token">(</span><span class="parameter token">tabs</span><span class="punctuation token">)</span> <span class="operator token">=&gt;</span> <span class="punctuation token">{</span>
+ <span class="keyword token">for</span> <span class="punctuation token">(</span><span class="parameter token"><span class="keyword token">var</span> tab <span class="keyword token">of</span> tabs</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">if</span> <span class="punctuation token">(</span><span class="parameter token">tab<span class="punctuation token">.</span>active</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> callback</span><span class="punctuation token">(</span>tab<span class="punctuation token">,</span> tabs<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+<span class="punctuation token">}</span></code></pre>
+
+<p><strong>Tabs erstellen, duplizieren, verschieben, aktualisieren, neu laden und entfernen</strong></p>
+
+<p>Nachdem Sie Informationen über die Registerkarten gesammelt haben, werden Sie höchstwahrscheinlich etwas mit ihnen machen wollen — entweder den Benutzern Funktionen für die Manipulation und Verwaltung von Registern bieten oder Funktionen in Ihrer Erweiterung implementieren.</p>
+
+<p>Folgende Funktionen stehen zur Verfügung:</p>
+
+<ul>
+ <li>Erstellen Sie eine neue Registerkarte ({{WebExtAPIRef("tabs.create")}}).</li>
+ <li>Duplizieren sie eine neue Registerkarte ({{WebExtAPIRef("tabs.duplicate")}}).</li>
+ <li>Entfernen Sie eine Registerkarte ({{WebExtAPIRef("tabs.remove")}}).</li>
+ <li>Verschieben Sie eine Registerkarte ({{WebExtAPIRef("tabs.move")}}).</li>
+ <li>Aktualisieren Sie die URL der Registerkarte, um — effektiv auf eine neue Seite — ({{WebExtAPIRef("tabs.update")}}).</li>
+ <li>Die Seite der Registerkarte neu Laden ({{WebExtAPIRef("tabs.reload")}}).</li>
+</ul>
+
+<div class="blockIndicator note">
+<p><strong>notiz:</strong></p>
+
+<p>Diese Funktionen erfordern alle die ID (oder IDs) der Registerkarte, die sie manipulieren:</p>
+
+<ul>
+ <li>{{WebExtAPIRef ("tabs.duplicate")}}</li>
+ <li>{{WebExtAPIRef("tabs.remove")}})</li>
+ <li>{{WebExtAPIRef ("tabs.move")}}</li>
+</ul>
+
+<p>Während die folgenden Funktionen auf dem aktiven Tab (sofern keine Tab-ID zur Verfügung gestellt wird) wirken:</p>
+
+<ul>
+ <li>{{WebExtAPIRef("tabs.update")}}</li>
+ <li>{{WebExtAPIRef("tabs.reload")}}</li>
+</ul>
+</div>
+
+<p><strong>Wie man mit dem Beispiel geht</strong></p>
+
+<p>Das Beispiel <a href="https://github.com/mdn/webextensions-examples/tree/master/tabs-tabs-tabs">Tabs-Tabs</a> übt all diese Funktionen aus, bis hin zur Aktualisierung der URL eines Tabs. Die Art und Weise, in der diese APIs verwendet werden, ist ähnlich, so dass wir uns eine der am meisten involvierten Implementierungen ansehen werden, die des "Move active tab to the beginning of the the. Option "Option der Fensterliste.</p>
+
+<p>Aber zunächst ist hier eine Demonstration des Features in Aktion:</p>
+
+<p>{{EmbedYouTube("-lJRzTIvhxo")}}</p>
+
+<p><a href="https://github.com/mdn/webextensions-examples/blob/master/tabs-tabs-tabs/manifest.json"><strong>manifest.json</strong></a></p>
+
+<p>Keine der Funktionen benötigt eine Betriebsgenehmigung, so dass es keine Funktionen in der manifest.json-Datei gibt, die hervorgehoben werden müssen.</p>
+
+<p><a href="https://github.com/mdn/webextensions-examples/blob/master/tabs-tabs-tabs/tabs.html"><strong>Tabs.html</strong></a></p>
+
+<p>Tabs.html definiert das "Menü", das im Popup angezeigt wird, das die Option "Aktive Registerkarte zum Anfang der Fensterliste verschieben" enthält, mit einer Reihe von<code> &lt;a&gt; </code>Tags, die von einem visuellen Separator gruppiert sind. Jeder Menüpunkt erhält eine ID, die in tabs.js verwendet wird, um festzustellen, welcher Menüpunkt angefordert wird.</p>
+
+<pre class="brush: html line-numbers language-html"><code class="language-html"> <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>a</span> <span class="attr-name token">href</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>#<span class="punctuation token">"</span></span> <span class="attr-name token">id</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>tabs-move-beginning<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>Move active tab to the beginning of the window<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>a</span><span class="punctuation token">&gt;</span></span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>br</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>a</span> <span class="attr-name token">href</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>#<span class="punctuation token">"</span></span> <span class="attr-name token">id</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>tabs-move-end<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>Move active tab to the end of the window<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>a</span><span class="punctuation token">&gt;</span></span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>br</span><span class="punctuation token">&gt;</span></span>
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>div</span> <span class="attr-name token">class</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>panel-section-separator<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>div</span><span class="punctuation token">&gt;</span></span>
+
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>a</span> <span class="attr-name token">href</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>#<span class="punctuation token">"</span></span> <span class="attr-name token">id</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>tabs-duplicate<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>Duplicate active tab<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>a</span><span class="punctuation token">&gt;</span></span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>br</span><span class="punctuation token">&gt;</span></span>
+
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>a</span> <span class="attr-name token">href</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>#<span class="punctuation token">"</span></span> <span class="attr-name token">id</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>tabs-reload<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>Reload active tab<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>a</span><span class="punctuation token">&gt;</span></span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>br</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>a</span> <span class="attr-name token">href</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>#<span class="punctuation token">"</span></span> <span class="attr-name token">id</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>tabs-alertinfo<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>Alert active tab info<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>a</span><span class="punctuation token">&gt;</span></span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>br</span><span class="punctuation token">&gt;</span></span></code></pre>
+
+<p><a href="https://github.com/mdn/webextensions-examples/blob/master/tabs-tabs-tabs/tabs.js"><strong>Tabs.js</strong></a></p>
+
+<p>Um das in tabs.html definierte "Menü" zu implementieren, enthält tabs.js einen Hörer für Klicks in tabs.html:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js">document<span class="punctuation token">.</span><span class="function token">addEventListener</span><span class="punctuation token">(</span><span class="string token">"click"</span><span class="punctuation token">,</span> <span class="keyword token">function</span><span class="punctuation token">(</span><span class="parameter token">e</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">function</span> <span class="function token">callOnActiveTab</span><span class="punctuation token">(</span><span class="parameter token">callback</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+
+<span class="function token"> getCurrentWindowTabs</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">.</span><span class="function token">then</span><span class="punctuation token">(</span><span class="punctuation token">(</span><span class="parameter token">tabs</span><span class="punctuation token">)</span> <span class="operator token">=&gt;</span> <span class="punctuation token">{</span>
+ <span class="keyword token">for</span> <span class="punctuation token">(</span><span class="parameter token"><span class="keyword token">var</span> tab <span class="keyword token">of</span> tabs</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">if</span> <span class="punctuation token">(</span><span class="parameter token">tab<span class="punctuation token">.</span>active</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> callback</span><span class="punctuation token">(</span>tab<span class="punctuation token">,</span> tabs<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+<span class="punctuation token">}</span></code></pre>
+
+<p>Eine Reihe von <code>if</code>Anweisungen dann schauen, um die ID des Artikels geklickt.</p>
+
+<p>Dieser Code-Snippet ist für die Option "Aktive Registerkarte zum Anfang der Fensterliste verschieben":</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"> <span class="keyword token">if</span> <span class="punctuation token">(</span>e<span class="punctuation token">.</span>target<span class="punctuation token">.</span>id <span class="operator token">===</span> <span class="string token">"tabs-move-beginning"</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> callOnActiveTab</span><span class="punctuation token">(</span><span class="punctuation token">(</span><span class="parameter token">tab<span class="punctuation token">,</span> tabs</span><span class="punctuation token">)</span> <span class="operator token">=&gt;</span> <span class="punctuation token">{</span>
+ <span class="keyword token">var</span> index <span class="operator token">=</span> <span class="number token">0</span><span class="punctuation token">;</span>
+ <span class="keyword token">if</span> <span class="punctuation token">(</span><span class="parameter token"><span class="operator token">!</span>tab<span class="punctuation token">.</span>pinned</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ index <span class="operator token">=</span> <span class="function token">firstUnpinnedTab</span><span class="punctuation token">(</span>tabs<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="template-string token"><span class="string token">`moving </span><span class="interpolation token"><span class="interpolation-punctuation punctuation token">${</span>tab<span class="punctuation token">.</span>id<span class="interpolation-punctuation punctuation token">}</span></span><span class="string token"> to </span><span class="interpolation token"><span class="interpolation-punctuation punctuation token">${</span>index<span class="interpolation-punctuation punctuation token">}</span></span><span class="string token">`</span></span><span class="punctuation token">)</span>
+ browser<span class="punctuation token">.</span>tabs<span class="punctuation token">.</span><span class="function token">move</span><span class="punctuation token">(</span><span class="punctuation token">[</span>tab<span class="punctuation token">.</span>id<span class="punctuation token">]</span><span class="punctuation token">,</span> <span class="punctuation token">{</span>index<span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span></code></pre>
+
+<p>Es ist erwähnenswert, die Verwendung von <code>console.log ()</code>. Auf diese Weise können Sie Informationen an die <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Debugging">Debugger-Konsole</a> ausgeben , was bei der Lösung von Problemen, die während der Entwicklung gefunden wurden, nützlich sein kann.</p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/15722/console.png"></p>
+
+<p>Der Bewegungscode ruft zunächst <code>callOnActiveTab ()</code> an , der wiederum <code>getCurrentWindowTabs ()</code> anruft, um eine {{WebExtAPIRef("tabs.Tab")}} Objekt, das die Registerkarten des aktiven Fensters enthält. Es schleift sich dann durch das Objekt, um das aktive Tab-Objekt zu finden und zurückzugeben:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">callOnActiveTab</span><span class="punctuation token">(</span><span class="parameter token">callback</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> getCurrentWindowTabs</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">.</span><span class="function token">then</span><span class="punctuation token">(</span><span class="punctuation token">(</span><span class="parameter token">tabs</span><span class="punctuation token">)</span> <span class="operator token">=&gt;</span> <span class="punctuation token">{</span>
+ <span class="keyword token">for</span> <span class="punctuation token">(</span><span class="parameter token"><span class="keyword token">var</span> tab <span class="keyword token">of</span> tabs</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">if</span> <span class="punctuation token">(</span><span class="parameter token">tab<span class="punctuation token">.</span>active</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> callback</span><span class="punctuation token">(</span>tab<span class="punctuation token">,</span> tabs<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span></code></pre>
+
+<p><strong>Gepinnte Tabs</strong></p>
+
+<p>Eine Besonderheit von Registern ist, dass  der Benutzer Tabs in ein Fenster einfügen kann. Gepinnte Tabs werden am Anfang der Tab-Liste platziert und können nicht verschoben werden. Das bedeutet, dass die früheste Position, in die sich ein Tab bewegen kann, die erste Position nach einem gefiederten Tabs ist. Also , <code>firstUnpinnedTab ()</code> wird aufgerufen, um die Position des ersten ungepasten Tab zu finden, indem man durch das <code>Tabs</code>-Objekt Looping:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">firstUnpinnedTab</span><span class="punctuation token">(</span><span class="parameter token">tabs</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">for</span> <span class="punctuation token">(</span><span class="parameter token"><span class="keyword token">var</span> tab <span class="keyword token">of</span> tabs</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">if</span> <span class="punctuation token">(</span><span class="parameter token"><span class="operator token">!</span>tab<span class="punctuation token">.</span>pinned</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">return</span> tab<span class="punctuation token">.</span>index<span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span>
+<span class="punctuation token">}</span></code></pre>
+
+<p>Wir haben jetzt alles, was zum Verschieben des Tab notwendig ist: Das aktive Tab-Objekt, von dem wir die Reiter-ID erhalten können und die Position, in die der Reiter verschoben werden soll. So können wir den Schritt umsetzen:</p>
+
+<pre>browser.tabs.move ([tab.id], {index});</pre>
+
+<p>Die restlichen Funktionen zum Duplizieren, Laden, Erstellen und Entfernen von Tabs werden ähnlich implementiert.</p>
+
+<h4 id="Manipulationen_eines_Tab"><strong>Manipulationen eines Tab</strong></h4>
+
+<p>Die nächste Reihe von Funktionen ermöglicht es Ihnen, die Zoomstufe in einem Tab zu erhalten  ({{WebExtAPIRef("tabs.getZoom")}}) und zu setzen ({{WebExtAPIRef("tabs.setZoom")}}) . Sie können auch die Zoom-Einstellungen abrufen ({{WebExtAPIRef("tabs.getZoomSettings")}}) , aber zum Zeitpunkt des Schreibens war die Möglichkeit, die Einstellungen zu setzen ({{WebExtAPIRef("tabs.setZoomSettings")}}) , war in Firefox nicht verfügbar.</p>
+
+<p>Der Zoomwert kann zwischen 30% und 300% liegen (dargestellt als Dezimalzahl <code>0,3 bis 3</code>).</p>
+
+<p>In Firefox sind die Standard-Zoom-Einstellungen:</p>
+
+<ul>
+ <li><strong>Standard-Zoom-Level: </strong>100%.</li>
+ <li><strong>Zoommodus:</strong> Automatik (so verwaltet der Browser, wie Zoomstufen gesetzt werden).</li>
+ <li><strong>Umfang der Zoomwechsel</strong> : "pro-origin",was bedeutet, dass, wenn Sie eine Website wieder besuchen, es die Zoomstufe, die in Ihrem letzten Besuch eingestellt wird, benötigt.</li>
+</ul>
+
+<h3 id="Wie_man_mit_dem_Beispiel_geht_2">Wie man mit dem Beispiel geht</h3>
+
+<p>Das  Beispiel der Tabs-Tabs-Tabs enthält drei Vorführungen der Zoom-Funktion: Zoomen, Zoomen und Zoom zurücksetzen. Hier ist das Feature in Aktion:</p>
+
+<p>{{EmbedYouTube("RFr3oYBCg28")}}</p>
+
+<p>Schauen wir uns an, wie der Zoom-In umgesetzt wird.</p>
+
+<p><a href="https://github.com/mdn/webextensions-examples/blob/master/tabs-tabs-tabs/manifest.json"><strong>manifest.json</strong></a></p>
+
+<p>Keine der Zoom-Funktionen benötigt Berechtigungen, so dass es keine Funktionen in der manifest.json-Datei gibt, die hervorgehoben werden müssen.</p>
+
+<p><a href="https://github.com/mdn/webextensions-examples/blob/master/tabs-tabs-tabs/tabs.html"><strong>Tabs.html</strong></a></p>
+
+<p>Wir haben bereits darüber diskutiert, wie der tabs.html die Optionen für diese Erweiterung definiert, nichts Neues oder Einzigartiges wird getan, um die Zoom-Optionen zur Verfügung zu stellen.</p>
+
+<p><a href="https://github.com/mdn/webextensions-examples/blob/master/tabs-tabs-tabs/tabs.js"><strong>Tabs.js</strong></a></p>
+
+<p>Tabs.js beginnt mit der Definition mehrerer Konstanten, die im Zoom-Code verwendet werden:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">const</span> <span class="constant token">ZOOM_INCREMENT</span> <span class="operator token">=</span> <span class="number token">0.2</span><span class="punctuation token">;</span>
+<span class="keyword token">const</span> <span class="constant token">MAX_ZOOM</span> <span class="operator token">=</span> <span class="number token">3</span><span class="punctuation token">;</span>
+<span class="keyword token">const</span> <span class="constant token">MIN_ZOOM</span> <span class="operator token">=</span> <span class="number token">0.3</span><span class="punctuation token">;</span>
+<span class="keyword token">const</span> <span class="constant token">DEFAULT_ZOOM</span> <span class="operator token">=</span> <span class="number token">1</span><span class="punctuation token">;</span></code></pre>
+
+<p>Es verwendet dann den gleichen Hörer, den wir zuvor besprochen haben, so dass es auf Klicks in tabs.html wirken kann.</p>
+
+<p>Für den Zoom in der Funktion läuft das:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">else</span> <span class="keyword token">if</span> <span class="punctuation token">(</span>e<span class="punctuation token">.</span>target<span class="punctuation token">.</span>id <span class="operator token">===</span> <span class="string token">"tabs-add-zoom"</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> callOnActiveTab</span><span class="punctuation token">(</span><span class="punctuation token">(</span><span class="parameter token">tab</span><span class="punctuation token">)</span> <span class="operator token">=&gt;</span> <span class="punctuation token">{</span>
+ <span class="keyword token">var</span> gettingZoom <span class="operator token">=</span> browser<span class="punctuation token">.</span>tabs<span class="punctuation token">.</span><span class="function token">getZoom</span><span class="punctuation token">(</span>tab<span class="punctuation token">.</span>id<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ gettingZoom<span class="punctuation token">.</span><span class="function token">then</span><span class="punctuation token">(</span><span class="punctuation token">(</span><span class="parameter token">zoomFactor</span><span class="punctuation token">)</span> <span class="operator token">=&gt;</span> <span class="punctuation token">{</span>
+ <span class="comment token">//the maximum zoomFactor is 3, it can't go higher</span>
+ <span class="keyword token">if</span> <span class="punctuation token">(</span><span class="parameter token">zoomFactor <span class="operator token">&gt;=</span> <span class="constant token">MAX_ZOOM</span></span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> alert</span><span class="punctuation token">(</span><span class="string token">"Tab zoom factor is already at max!"</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span> <span class="keyword token">else</span> <span class="punctuation token">{</span>
+ <span class="keyword token">var</span> newZoomFactor <span class="operator token">=</span> zoomFactor <span class="operator token">+</span> <span class="constant token">ZOOM_INCREMENT</span><span class="punctuation token">;</span>
+ <span class="comment token">//if the newZoomFactor is set to higher than the max accepted</span>
+ <span class="comment token">//it won't change, and will never alert that it's at maximum</span>
+ newZoomFactor <span class="operator token">=</span> newZoomFactor <span class="operator token">&gt;</span> <span class="constant token">MAX_ZOOM</span> <span class="operator token">?</span> <span class="constant token">MAX_ZOOM</span> <span class="punctuation token">:</span> newZoomFactor<span class="punctuation token">;</span>
+ browser<span class="punctuation token">.</span>tabs<span class="punctuation token">.</span><span class="function token">setZoom</span><span class="punctuation token">(</span>tab<span class="punctuation token">.</span>id<span class="punctuation token">,</span> newZoomFactor<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span></code></pre>
+
+<p>Dieser Code verwendet <code>callOnActiveTab ()</code> , um die Details des aktiven Tab zu erhalten, dann wird {{WebExtAPIRef("tabs.getZoom")}} den aktuellen Zoom-Faktor der Registerkarte erhalten. Der aktuelle Zoom wird mit dem definierten Maximum (MAX _ ZOOM)und einem Alarm verglichen, der ausgegeben wird, wenn sich der Tab bereits im Maximalzoom befindet. Andernfalls wird der Zoom-Level erhöht, aber auf den maximalen Zoom beschränkt, dann wird der Zoom mit {{WebExtAPIRef("tabs.getZoom")}}. gesetzt .</p>
+
+<h4 id="Manipulationen_eines_Tabs_CSS"><strong>Manipulationen eines Tabs CSS</strong></h4>
+
+<p>Eine weitere wichtige Fähigkeit, die die Tabs API bietet, ist die Möglichkeit, die CSS innerhalb eines Tab zu manipulieren — neue CSS zu einem Tab hinzufügen ({{WebExtAPIRef ("tabu Die [[Datei]] der [[Datei]] der [[Datei]] der [[Datei]] der [[Datei]] ist (" tabs.removeCSS ")).</p>
+
+<p>Dies kann zum Beispiel nützlich sein, wenn Sie bestimmte Seitenelemente markieren oder das Standardlayout der Seite ändern wollen.</p>
+
+<h3 id="Wie_man_mit_dem_Beispiel_geht_3">Wie man mit dem Beispiel geht</h3>
+
+<p>Das <a href="https://github.com/mdn/webextensions-examples/tree/master/apply-css">Apply-css-Beispiel</a> nutzt diese Funktionen, um der Webseite im aktiven Tab einen roten Rand hinzuzufügen. Hier ist das Feature in Aktion:</p>
+
+<p>{{EmbedYouTube ("bcK-GT2Dyhs")}</p>
+
+<p>Gehen wir durch, wie es aufgebaut ist.</p>
+
+<p><a href="https://github.com/mdn/webextensions-examples/blob/master/apply-css/manifest.json"><strong>manifest.json</strong></a></p>
+
+<p>Um die CSS-Funktionen nutzen zu können, benötigen Sie entweder:</p>
+
+<ul>
+ <li><code>"Tabs "</code> -Erlaubnis und <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions#Host_permissions">Host-Erlaubnis</a> oder</li>
+ <li><code>"activeTab"</code>-Erlaubnis .</li>
+</ul>
+
+<p>Letzteres ist das nützlichste, da es einer Erweiterung erlaubt,  {{WebExtAPIRef("tabs.insertCSS")}} und  {{WebExtAPIRef("tabs.removeCSS")}} in der aktiven Registerkarte zu verwenden, wenn sie von der Browser-oder Seitenaktion, dem Kontextmenü oder einem Shortcut der Erweiterung ausgeführt wird.</p>
+
+<pre class="brush: json line-numbers language-json"><code class="language-json"><span class="punctuation token">{</span>
+ <span class="property token">"description"</span><span class="operator token">:</span> <span class="string token">"Adds a page action to toggle applying CSS to pages."</span><span class="punctuation token">,</span>
+
+ <span class="property token">"manifest_version"</span><span class="operator token">:</span> <span class="number token">2</span><span class="punctuation token">,</span>
+ <span class="property token">"name"</span><span class="operator token">:</span> <span class="string token">"apply-css"</span><span class="punctuation token">,</span>
+ <span class="property token">"version"</span><span class="operator token">:</span> <span class="string token">"1.0"</span><span class="punctuation token">,</span>
+ <span class="property token">"homepage_url"</span><span class="operator token">:</span> <span class="string token">"https://github.com/mdn/webextensions-examples/tree/master/apply-css"</span><span class="punctuation token">,</span>
+
+ <span class="property token">"background"</span><span class="operator token">:</span> <span class="punctuation token">{</span>
+
+ <span class="property token">"scripts"</span><span class="operator token">:</span> <span class="punctuation token">[</span><span class="string token">"background.js"</span><span class="punctuation token">]</span>
+ <span class="punctuation token">}</span><span class="punctuation token">,</span>
+
+ <span class="property token">"page_action"</span><span class="operator token">:</span> <span class="punctuation token">{</span>
+
+ <span class="property token">"default_icon"</span><span class="operator token">:</span> <span class="string token">"icons/off.svg"</span><span class="punctuation token">,</span>
+ <span class="property token">"browser_style"</span><span class="operator token">:</span> <span class="boolean token">true</span>
+ <span class="punctuation token">}</span><span class="punctuation token">,</span>
+
+ <span class="property token">"permissions"</span><span class="operator token">:</span> <span class="punctuation token">[</span>
+ <span class="string token">"activeTab"</span><span class="punctuation token">,</span>
+ <span class="string token">"tabs"</span>
+ <span class="punctuation token">]</span>
+
+<span class="punctuation token">}</span></code></pre>
+
+<p>Sie werden darauf hinweisen, dass zusätzlich zu "<code>activeTab</code>" die Erlaubnis " Tabs"angefordert wird. Diese zusätzliche Erlaubnis ist erforderlich, um das Skript der Erweiterung in die Lage zu versetzen, auf die URL des Registers zuzugreifen, deren Bedeutung wir gleich sehen werden.</p>
+
+<p>Die anderen Hauptmerkmale in der manifest.json-Datei sind die Definition von:</p>
+
+<ul>
+ <li><strong>Ein Hintergrundskript</strong>, das gestartet wird, sobald die Erweiterung geladen wird.</li>
+ <li><strong>Eine "Seitenaktion</strong>", die ein Symbol definiert, das in die Adressleiste des Browsers aufgenommen werden soll.</li>
+</ul>
+
+<p><a href="https://github.com/mdn/webextensions-examples/blob/master/apply-css/background.js"><strong>Background.js</strong></a></p>
+
+<p>Beim Start setzt background.js einige Konstanten, um die zu bewendenden CSS zu definieren, Titel für die "Seitenaktion", und eine Liste von Protokollen, in denen die Erweiterung funktioniert:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">const</span> <span class="constant token">CSS</span> <span class="operator token">=</span> <span class="string token">"body { border: 20px solid red; }"</span><span class="punctuation token">;</span>
+<span class="keyword token">const</span> <span class="constant token">TITLE_APPLY</span> <span class="operator token">=</span> <span class="string token">"Apply CSS"</span><span class="punctuation token">;</span>
+<span class="keyword token">const</span> <span class="constant token">TITLE_REMOVE</span> <span class="operator token">=</span> <span class="string token">"Remove CSS"</span><span class="punctuation token">;</span>
+<span class="keyword token">const</span> <span class="constant token">APPLICABLE_PROTOCOLS</span> <span class="operator token">=</span> <span class="punctuation token">[</span><span class="string token">"http:"</span><span class="punctuation token">,</span> <span class="string token">"https:"</span><span class="punctuation token">]</span><span class="punctuation token">;</span></code></pre>
+
+<p>Wenn die Erweiterung zum ersten Mal geladen wird, verwendet sie {{WebExtAPIRef("tabs.query")}}, um eine Liste aller Tabs im aktuellen Browserfenster zu erhalten. Es schleit sich dann durch die Tabs, die <code>InitializePageAction()</code>rufen.</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> gettingAllTabs <span class="operator token">=</span> browser<span class="punctuation token">.</span>tabs<span class="punctuation token">.</span><span class="function token">query</span><span class="punctuation token">(</span><span class="punctuation token">{</span><span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+gettingAllTabs<span class="punctuation token">.</span><span class="function token">then</span><span class="punctuation token">(</span><span class="punctuation token">(</span><span class="parameter token">tabs</span><span class="punctuation token">)</span> <span class="operator token">=&gt;</span> <span class="punctuation token">{</span>
+ <span class="keyword token">for</span> <span class="punctuation token">(</span><span class="parameter token"><span class="keyword token">let</span> tab <span class="keyword token">of</span> tabs</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+<span class="function token"> initializePageAction</span><span class="punctuation token">(</span>tab<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+<span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<p><code>InitializePageAction</code> verwendet protokolIsApplicable () , um festzustellen, ob die URL der aktiven Registerkarte eine ist, auf die die CSS angewendet werden kann:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">protocolIsApplicable</span><span class="punctuation token">(</span><span class="parameter token">url</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">var</span> anchor <span class="operator token">=</span> document<span class="punctuation token">.</span><span class="function token">createElement</span><span class="punctuation token">(</span><span class="string token">'a'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ anchor<span class="punctuation token">.</span>href <span class="operator token">=</span> url<span class="punctuation token">;</span>
+ <span class="keyword token">return</span> <span class="constant token">APPLICABLE_PROTOCOLS</span><span class="punctuation token">.</span><span class="function token">includes</span><span class="punctuation token">(</span>anchor<span class="punctuation token">.</span>protocol<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span></code></pre>
+
+<p>Wenn das Beispiel dann auf der Registerkarte wirken kann, setzt <code>initializePageAction ()</code> das <code>PageAction</code>-Symbol und den Titel des Tab, um die "Off"-Versionen zu verwenden, bevor die <code>PageAction</code>-Version sichtbar gemacht wird:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">initializePageAction</span><span class="punctuation token">(</span><span class="parameter token">tab</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+
+ <span class="keyword token">if</span> <span class="punctuation token">(</span><span class="parameter token"><span class="function token">protocolIsApplicable</span><span class="punctuation token">(</span>tab<span class="punctuation token">.</span>url<span class="punctuation token">)</span></span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ browser<span class="punctuation token">.</span>pageAction<span class="punctuation token">.</span><span class="function token">setIcon</span><span class="punctuation token">(</span><span class="punctuation token">{</span>tabId<span class="punctuation token">:</span> tab<span class="punctuation token">.</span>id<span class="punctuation token">,</span> path<span class="punctuation token">:</span> <span class="string token">"icons/off.svg"</span><span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ browser<span class="punctuation token">.</span>pageAction<span class="punctuation token">.</span><span class="function token">setTitle</span><span class="punctuation token">(</span><span class="punctuation token">{</span>tabId<span class="punctuation token">:</span> tab<span class="punctuation token">.</span>id<span class="punctuation token">,</span> title<span class="punctuation token">:</span> <span class="constant token">TITLE_APPLY</span><span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ browser<span class="punctuation token">.</span>pageAction<span class="punctuation token">.</span><span class="function token">show</span><span class="punctuation token">(</span>tab<span class="punctuation token">.</span>id<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+<span class="punctuation token">}</span></code></pre>
+
+<p>Als Nächstes wartet ein Zuhörer auf der <code>pageAction.onClicked</code> darauf, dass das <code>PageAction</code>-Symbol angeklickt wird  , und ruft toggleCSS an , wenn es ist.</p>
+
+<pre>browser.pageAction.onClicked.addListener (toggleCSS);</pre>
+
+<p><code>ToggleCSS ()</code> erhält den Titel der <code>PageAction</code> und nimmt dann die beschriebene Aktion auf:</p>
+
+<ul>
+ <li><strong>Für "Apply CSS":</strong>
+
+ <ul>
+ <li>Das <code>PageAction</code>-Symbol und den Titel in die "Entfernen"-Versionen.</li>
+ <li>Es ist eine sehr gut. {{WebExtAPIRef("tabs.insertCSS")}}.</li>
+ </ul>
+ </li>
+ <li><strong>Für "Remove CSS":</strong>
+ <ul>
+ <li>Das <code>PageAction</code>-Symbol und den Titel in die "Anwendung"-Versionen.</li>
+ <li>Entfernt die CSS mit {{WebExtAPIRef("tabs.removeCSS")}}.</li>
+ </ul>
+ </li>
+</ul>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">toggleCSS</span><span class="punctuation token">(</span><span class="parameter token">tab</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+
+
+ <span class="keyword token">function</span> <span class="function token">gotTitle</span><span class="punctuation token">(</span><span class="parameter token">title</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+
+ <span class="keyword token">if</span> <span class="punctuation token">(</span>title <span class="operator token">===</span> <span class="constant token">TITLE_APPLY</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ browser<span class="punctuation token">.</span>pageAction<span class="punctuation token">.</span><span class="function token">setIcon</span><span class="punctuation token">(</span><span class="punctuation token">{</span>tabId<span class="punctuation token">:</span> tab<span class="punctuation token">.</span>id<span class="punctuation token">,</span> path<span class="punctuation token">:</span> <span class="string token">"icons/on.svg"</span><span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ browser<span class="punctuation token">.</span>pageAction<span class="punctuation token">.</span><span class="function token">setTitle</span><span class="punctuation token">(</span><span class="punctuation token">{</span>tabId<span class="punctuation token">:</span> tab<span class="punctuation token">.</span>id<span class="punctuation token">,</span> title<span class="punctuation token">:</span> <span class="constant token">TITLE_REMOVE</span><span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ browser<span class="punctuation token">.</span>tabs<span class="punctuation token">.</span><span class="function token">insertCSS</span><span class="punctuation token">(</span><span class="punctuation token">{</span>code<span class="punctuation token">:</span> <span class="constant token">CSS</span><span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span> <span class="keyword token">else</span> <span class="punctuation token">{</span>
+ browser<span class="punctuation token">.</span>pageAction<span class="punctuation token">.</span><span class="function token">setIcon</span><span class="punctuation token">(</span><span class="punctuation token">{</span>tabId<span class="punctuation token">:</span> tab<span class="punctuation token">.</span>id<span class="punctuation token">,</span> path<span class="punctuation token">:</span> <span class="string token">"icons/off.svg"</span><span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ browser<span class="punctuation token">.</span>pageAction<span class="punctuation token">.</span><span class="function token">setTitle</span><span class="punctuation token">(</span><span class="punctuation token">{</span>tabId<span class="punctuation token">:</span> tab<span class="punctuation token">.</span>id<span class="punctuation token">,</span> title<span class="punctuation token">:</span> <span class="constant token">TITLE_APPLY</span><span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ browser<span class="punctuation token">.</span>tabs<span class="punctuation token">.</span><span class="function token">removeCSS</span><span class="punctuation token">(</span><span class="punctuation token">{</span>code<span class="punctuation token">:</span> <span class="constant token">CSS</span><span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span>
+
+ <span class="keyword token">var</span> gettingTitle <span class="operator token">=</span> browser<span class="punctuation token">.</span>pageAction<span class="punctuation token">.</span><span class="function token">getTitle</span><span class="punctuation token">(</span><span class="punctuation token">{</span>tabId<span class="punctuation token">:</span> tab<span class="punctuation token">.</span>id<span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+ gettingTitle<span class="punctuation token">.</span><span class="function token">then</span><span class="punctuation token">(</span>gotTitle<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span></code></pre>
+
+<p>Um sicherzustellen, dass die PageAction nach jedem Update auf den Tab gültig ist, ruft ein Zuhörer auf  {{WebExtAPIRef("tabs.onUpdated")}} jedes Mal, wenn der Tab aktualisiert wird, auf initializePageAction () , um zu überprüfen, ob der Reiter immer noch ein Protokoll, auf das das CSS angewendet werden kann.</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js">browser<span class="punctuation token">.</span>tabs<span class="punctuation token">.</span>onUpdated<span class="punctuation token">.</span><span class="function token">addListener</span><span class="punctuation token">(</span><span class="punctuation token">(</span><span class="parameter token">id<span class="punctuation token">,</span> changeInfo<span class="punctuation token">,</span> tab</span><span class="punctuation token">)</span> <span class="operator token">=&gt;</span> <span class="punctuation token">{</span>
+<span class="function token"> initializePageAction</span><span class="punctuation token">(</span>tab<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<h4 id="Einige_weitere_interessante_Fähigkeiten"><strong>Einige weitere interessante Fähigkeiten</strong></h4>
+
+<p>Es gibt noch ein paar andere Tabs API-Funktionen, die nicht in einen der früheren Abschnitte passen:</p>
+
+<ul>
+ <li>Erfassen Sie den sichtbaren Tab-Inhalt mit {{WebExtAPIRef("tabs.captureVisibleTab")}}.</li>
+ <li>Erkennen Sie die Hauptsprache des Inhalts in einem Tab mit {{WebExtAPIRef("tabs.detectLanguage")}} . Dies könnte zum Beispiel verwendet werden, um die Sprache in Ihrem UI mit der Seite, in der sie läuft, zu vergleichen.</li>
+</ul>
+
+<p><strong>Weitere Informationen</strong></p>
+
+<p>Wenn Sie mehr über die Tabs API erfahren möchten, schauen Sie sich an:</p>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs">Tabs API-Referenz</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Examples">Beispielerweiterungen</a> (von denen viele die Tabs API verwenden)<a name="_GoBack"></a></li>
+</ul>
+
+<p> </p>
diff --git a/files/de/mozilla/add-ons/webextensions/beispiele/index.html b/files/de/mozilla/add-ons/webextensions/beispiele/index.html
new file mode 100644
index 0000000000..627dbe559d
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/beispiele/index.html
@@ -0,0 +1,22 @@
+---
+title: Beispiele für Erweiterungen
+slug: Mozilla/Add-ons/WebExtensions/Beispiele
+tags:
+ - WebExtensions
+translation_of: Mozilla/Add-ons/WebExtensions/Examples
+---
+<div>{{AddonSidebar}}</div>
+
+<p><span id="result_box" lang="de"><span>Um zu veranschaulichen, wie Erweiterungen entwickelt werden, gibt es von uns ein Repository mit einfachen Beispielerweiterungen unter https://github.com/mdn/webextensions-examples.</span></span> <span id="result_box" lang="de"><span>Dieser Artikel beschreibt die WebExtension-APIs, die in diesem Repository verwendet werden.</span></span></p>
+
+<p><span lang="de"><span>Diese Beispiele funktionieren in Firefox Nightly: Die meisten funktionieren in früheren Versionen von Firefox, aber überprüfen Sie zur Sicherheit den Schlüssel <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/applications">strict_min_version</a> in der Datei manifest.json der Erweiterung.</span><br>
+ <br>
+ <span>Wenn Sie diese Beispiele ausprobieren möchten, haben Sie drei Möglichkeiten:</span><br>
+ <br>
+ 1.  <span>Klonen Sie das Repository, und laden Sie die Erweiterung direkt aus dem Quellverzeichnis mit der Funktion <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Temporary_Installation_in_Firefox">"Load Temporary Add-on"</a>.</span> <span>Die Erweiterung bleibt solange geladen, bis Sie Firefox neu starten.</span></span><br>
+ <span lang="de"><span>2. Klonen Sie das Repository und verwenden Sie dann das <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Getting_started_with_web-ext">web-ext</a> Befehlszeilentool, um Firefox mit der installierten Erweiterung auszuführen.</span><br>
+ 3. <span>Klonen Sie das Repository und gehen Sie dann zum <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Temporary_Installation_in_Firefox">Build</a>-Verzeichnis.</span> <span>Dieses enthält "Build"- und "Signed"-Versionen aller Beispiele; Sie können sie also einfach in Firefox öffnen (mit Datei / Datei öffnen) und sie dauerhaft installieren, genau wie eine Erweiterung, die Sie von <a href="https://addons.mozilla.org/">addons.mozilla.org</a> installieren würden.</span><br>
+ <br>
+ <span>Wenn Sie einen Beitrag zum Repository leisten möchten, senden Sie uns ein <a href="https://github.com/mdn/webextensions-examples/blob/master/CONTRIBUTING.md">Pull-Request</a>!</span></span></p>
+
+<p>{{WebExtAllExamples}}</p>
diff --git a/files/de/mozilla/add-ons/webextensions/browser_support_for_javascript_apis/index.html b/files/de/mozilla/add-ons/webextensions/browser_support_for_javascript_apis/index.html
new file mode 100644
index 0000000000..1dffe19399
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/browser_support_for_javascript_apis/index.html
@@ -0,0 +1,15 @@
+---
+title: Browser support for JavaScript APIs
+slug: Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs
+translation_of: Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs
+---
+<div>{{AddonSidebar}}</div>
+
+<div>{{WebExtAllCompatTables}}</div>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<div class="note"><strong>Acknowledgements</strong>
+
+<p>Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.</p>
+</div>
diff --git a/files/de/mozilla/add-ons/webextensions/deine_erste_weberweiterung/index.html b/files/de/mozilla/add-ons/webextensions/deine_erste_weberweiterung/index.html
new file mode 100644
index 0000000000..b48b805b98
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/deine_erste_weberweiterung/index.html
@@ -0,0 +1,155 @@
+---
+title: Deine erste Erweiterung
+slug: Mozilla/Add-ons/WebExtensions/Deine_erste_WebErweiterung
+tags:
+ - Anleitung
+ - Erweiterung
+ - Weberweiterung
+translation_of: Mozilla/Add-ons/WebExtensions/Your_first_WebExtension
+---
+<div>{{AddonSidebar}}</div>
+
+<p>In diesem Artikel wird die Erstellung einer Erweiterung (Extension) für Firefox komplett beschrieben. Diese Erweiterung soll einen roten Rand zu jeder Seite, die von "mozilla.org" oder einer Subdomain geladen wurde, hinzufügen.</p>
+
+<p>Der Quellcode für dieses Beispiel ist auf GitHub auffindbar: <a href="https://github.com/mdn/webextensions-examples/tree/master/borderify">https://github.com/mdn/webextensions-examples/tree/master/borderify</a>.</p>
+
+<p>Als Erstes benötigst du Firefox Version 45 oder neuer.</p>
+
+<h2 id="Schreiben_der_Erweiterung">Schreiben der Erweiterung</h2>
+
+<p>Erstelle ein neues Verzeichnis und navigiere zu diesem:</p>
+
+<pre class="brush: bash">mkdir borderify
+cd borderify</pre>
+
+<h3 id="manifest.json">manifest.json</h3>
+
+<p>Jetzt erstelle eine Datei namens "manifest.json" direkt in dem "borderify" -Verzeichnis mit dem folgenden Inhalt:</p>
+
+<pre class="brush: json">{
+
+ "manifest_version": 2,
+ "name": "Borderify",
+ "version": "1.0",
+
+ "description": "Adds a red border to all webpages matching mozilla.org.",
+
+ "icons": {
+ "48": "icons/border-48.png"
+ },
+
+ "content_scripts": [
+ {
+ "matches": ["*://*.mozilla.org/*"],
+ "js": ["borderify.js"]
+ }
+ ]
+
+}</pre>
+
+<ul>
+ <li>Die ersten drei <em>Keys</em>: <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/manifest_version">manifest_version</a></code>, <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/name">name</a></code> und <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/version">version</a></code> sind verpflichtend und beinhalten grundlegende Metadaten für die Erweiterung.</li>
+ <li><code><a href="/en-US/Add-ons/WebExtensions/manifest.json/description">description</a></code> ist optional, aber empfehlenswert: diese wird dann im Add-ons Manager angezeigt.</li>
+ <li><code><a href="/en-US/Add-ons/WebExtensions/manifest.json/icons">icons</a></code> ist optional, aber empfehlenswert: es erlaubt es dir ein Icon für deine Erweiterung festzulegen, welches ebenfalls im Add-ons Manager angezeigt wird.</li>
+</ul>
+
+<p>Der interessanteste <em>Key</em> hier ist  <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/content_scripts">content_scripts</a></code>, welcher Firefox auffordert, ein Skript in allen Webseiten zu laden, deren URLs einem spezifischen Muster zuzuordnen sind. In diesem Fall fragen wir Firefox nach dem Skript namens "borderify.js", um es in allen HTTP oder HTTPS Seiten von "mozilla.org" oder einer Subdomain zu laden.</p>
+
+<ul>
+ <li><a href="/en-US/Add-ons/WebExtensions/Content_scripts">Lerne mehr über content scripts.</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Match_patterns">Lerne mehr über übereinstimmende Muster</a>.</li>
+</ul>
+
+<div class="warning">
+<p><a href="/en-US/Add-ons/WebExtensions/WebExtensions_and_the_Add-on_ID#When_do_you_need_an_Add-on_ID">In manchen Situation musst eine ID für deine Erweiterung festlegen</a>. Wenn du eine Add-on ID festlegen musst, schreibe den  <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/applications">applications</a></code> key in <code>manifest.json</code> und setze die <code>gecko.id</code>-Eigenschaft:</p>
+
+<pre class="brush: json">"applications": {
+ "gecko": {
+ "id": "borderify@example.com"
+ }
+}</pre>
+</div>
+
+<h3 id="iconsborder-48.png">icons/border-48.png</h3>
+
+<p>Die Erweiterung sollte ein Icon haben. Dieses wird neben dem Erweiterungseintrag in dem Add-ons manager angezeigt. Unsere manifest.json gibt den Ort des Icons unter "icons/border-48.png" an.</p>
+
+<p>Erstelle das "icons" Verzeichnis direkt in dem "borderify" Verzeichnis. Speichere dort ein Icon namens "border-48.png".  Du kannst dazu das <a href="https://github.com/mdn/webextensions-examples/blob/master/borderify/icons/border-48.png">von unserem Beispiel benutzen</a>, welches von der Google Material Design Iconsammlung stammt und unter den Richtlinien der <a href="https://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike</a> Lizenz steht.</p>
+
+<p>Wenn du dich entscheidest ein eigenes Icon zu verwenden, dann sollte dieses 48x48 Pixel groß sein. Du kannst ebenfalls ein 96x96 Pixel großes Icon für hochauflösende Bildschirme, übergeben, welches dann als die <code>96</code> Property des <code>icons</code>-Objekts in der manifest.json festgelegt wird:</p>
+
+<pre class="brush: json">"icons": {
+ "48": "icons/border-48.png",
+ "96": "icons/border-96.png"
+}</pre>
+
+<p>Alternativ kannst du auch eine SVG-Datei übergeben, welche dann automatisch korrekt skaliert wird.<br>
+ (Beachte: Wenn du SVG verwendest und dein Symbol Text enthält, kannst du das Werkzeug "convert to path" deines SVG-Editors verwenden, um den Text zu verflachen, so dass er mit einer einheitlichen Größe/Position skaliert wird.</p>
+
+<ul>
+ <li><a href="/en-US/Add-ons/WebExtensions/manifest.json/icons">Lerne mehr über das festlegen von Icons.</a></li>
+</ul>
+
+<h3 id="borderify.js">borderify.js</h3>
+
+<p>Schließlich erstelle eine Datei namens "borderify.js" direkt in dem "borderify"-Verzeichnis mit diesem Inhalt:</p>
+
+<pre class="brush: js">document.body.style.border = "5px solid red";</pre>
+
+<p>Dieses Skript wird in Seiten geladen, welche mit dem Muster des  <code>content_scripts</code>-Keys in der manifest.json Datei übereinstimmen. Das Skript hat direkten Zugriff auf das Dokument, genauso wie die Skripte, die von der Seite selbst geladen werden.</p>
+
+<ul>
+ <li><a href="/en-US/Add-ons/WebExtensions/Content_scripts">Lerne mehr über content scripts.</a></li>
+</ul>
+
+<h2 id="Probiere_es_aus">Probiere es aus:</h2>
+
+<p>Als Erstes stelle sicher, dass du die richtigen Dateien an den richtigen Orten hast:</p>
+
+<pre>borderify/
+ icons/
+ border-48.png
+ borderify.js
+ manifest.json</pre>
+
+<h3 id="Installiere_nun_das_Plugin">Installiere nun das Plugin</h3>
+
+<p>Öffne "about:debugging" in Firefox, klicke "Add-on temporär laden" und wähle eine beliebige Datei aus deinem Erweiterungsverzeichnis:</p>
+
+<p>{{EmbedYouTube("cer9EUKegG4")}}</p>
+
+<p>Die Erweiterung wird nun ausgeführt und ist solange aktiv, bis du Firefox neustartest.</p>
+
+<p>Alternativ kannst du Erweiterung auch von der Kommandozeile mit dem <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Getting_started_with_web-ext">web-ext</a> Tool ausführen.</p>
+
+<h3 id="Teste_es_nun_aus">Teste es nun aus</h3>
+
+<p>Nun besuche eine Seite von "mozilla.org". Du solltest jetzt einen roten Rand um die Seite erkennen:</p>
+
+<p>{{EmbedYouTube("rxBQl2Z9IBQ")}}</p>
+
+<div class="note">
+<p>Versuche es allerdings nicht auf addons.mozilla.org! Content Scripts werden zurzeit auf dieser Domain geblockt.</p>
+</div>
+
+<p>Experimentiere nun ein bisschen. Bearbeite das "content script", um die Farbe des Randes zu ändern oder mache etwas anderes mit dem Seiteninhalt. Speichere das "content script", lade die Erweiterungsdateien in about:debugging neu mit Hilfe des "Neu laden"-Knopfs. Du kannst die Änderungen sofort sehen:</p>
+
+<p>{{EmbedYouTube("NuajE60jfGY")}}</p>
+
+<ul>
+ <li><a href="/en-US/Add-ons/WebExtensions/Temporary_Installation_in_Firefox">Lerne mehr über das Laden von Erweiterungen</a></li>
+</ul>
+
+<h2 id="Verpacken_und_Veröffentlichen">Verpacken und Veröffentlichen</h2>
+
+<p>Damit andere Personen deine Erweiterung benutzen können musst du deine Erweiterung verpacken und zum Signieren an Mozilla senden. Um mehr darüber zu lernen, siehe  <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Publishing_your_WebExtension">"Deine Erweiterung veröffentlichen"</a>.</p>
+
+<h2 id="Was_nun">Was nun?</h2>
+
+<p>Jetzt hast du eine Vorstellung vom Prozess der WebExtension-Entwicklung für Firefox erhalten. Versuche:</p>
+
+<ul>
+ <li><a href="/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension">mehr über die Anatomie von Erweiterungen zu lesen</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Your_second_WebExtension">eine komplexere Erweiterung zu schreiben</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/API">über die verfügbaren JavaScript APIs für Erweiterungen zu lesen.</a></li>
+</ul>
diff --git a/files/de/mozilla/add-ons/webextensions/deine_zweite_erweiterung/index.html b/files/de/mozilla/add-ons/webextensions/deine_zweite_erweiterung/index.html
new file mode 100644
index 0000000000..cc002d0b24
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/deine_zweite_erweiterung/index.html
@@ -0,0 +1,357 @@
+---
+title: Deine zweite Erweiterung
+slug: Mozilla/Add-ons/WebExtensions/Deine_zweite_Erweiterung
+translation_of: Mozilla/Add-ons/WebExtensions/Your_second_WebExtension
+---
+<p>{{AddonSidebar}}</p>
+
+<p>Wenn du den Artikel "<a href="https://developer.mozilla.org/de/Add-ons/WebExtensions/Deine_erste_WebErweiterung">Deine erste Erweiterung</a>" gelesen hast, hast du schon eine Vorstellung, wie man eine Erweiterung schreibt. In diesem Artikel werden wir eine komplexere Erweiterung schreiben, die mehr APIs benutzt.</p>
+
+<p>Die Erweiterung fügt eine neue Schaltfläche zu Firefox hinzu. Wenn der Nutzer diese anklickt, wird ihm ein Popup angezeigt auf dem er ein Tier auswählen kann. Sobald er eines ausgewählt hat, wird der aktulle Inhalt der Website mit dem Bild des ausgewählten Tieres ersetzt.</p>
+
+<p>Um das zu implementieren werden wir:</p>
+
+<ul>
+ <li><strong>eine <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/user_interface/Browser_action">Browser-Aktion</a> definieren, die zur Firefox-Toolbar hinzugefügt werden wird.</strong><br>
+ Für die Schaltfläche benötigen wir:
+ <ul>
+ <li>ein Icon namens "beasts-32.png"</li>
+ <li>Ein Popup welches sich öffnet, sobald der Nutzer auf die Schaltfläche klickt. Das Popup wird <a href="https://developer.mozilla.org/de/docs/Glossary/HTML">HTML</a>, <a href="https://developer.mozilla.org/de/docs/Glossary/CSS">CSS</a>, und <a href="https://developer.mozilla.org/de/docs/Glossary/JavaScript">JavaScript</a> beinhalten.</li>
+ </ul>
+ </li>
+ <li><strong>ein Icon festlegen</strong>, genannt "beasts-48.png". Dieses wird im Addon-Manager angezeigt werden.</li>
+ <li><strong>Ein content-script "beastify.js" schreiben, welches auf Webseiten angezeigt werden wird.</strong><br>
+ Das ist der Code, der letztendlich die Webseite verändert.</li>
+ <li><strong>Einige Tier-Bilder einfügen, um die Bilder auf der Webseite zu ersetzen</strong><br>
+ Die Bilder werden "web-abrufbare Ressourcen" werden, sodass die Webseite sie abrufen kann.</li>
+</ul>
+
+<p>Man kann die Struktur der Erweiterung wie folgt darstellen:</p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/13671/Untitled-1.png" style="display: block; height: 1200px; margin-left: auto; margin-right: auto; width: 860px;"></p>
+
+<p>Es ist eine einfache Erweiterung, aber es zeigt viele der Grundkonzepte der WebExtensions API:</p>
+
+<ul>
+ <li>Hinzufügen einer Schaltfläche zur Toolbar</li>
+ <li>Erstellen eines Popup-Menüs mit HTML, CSS, und JavaScript</li>
+ <li>Verändern des Webseiteninhalts</li>
+ <li>Kommunikation zwischen dem content-script und dem Rest der Erweiterung</li>
+ <li>Verpacken von Ressourcen, die später auf der Webseite genutzt werden können.</li>
+</ul>
+
+<p>Der <a href="https://github.com/mdn/webextensions-examples/tree/master/beastify">komplette Quellcode der Erweiterung</a> ist auf GitHub zu finden.</p>
+
+<p>Um die Erweiterung zu erstellen, brauchst du mindestens Firefox 45.</p>
+
+<h2 id="Die_Erweiterung_schreiben">Die Erweiterung schreiben</h2>
+
+<p>Erstelle einen neuen Ordner und öffne ihn:</p>
+
+<pre class="brush: bash">mkdir beastify
+cd beastify</pre>
+
+<h3 id="manifest.json">manifest.json</h3>
+
+<p>Erstelle jetzt eine Datei namens "manifest.json" und füge den folgenden Inhalt ein:</p>
+
+<pre class="brush: json">{
+
+ "manifest_version": 2,
+ "name": "Beastify",
+ "version": "1.0",
+
+ "description": "Erstellt eine Schaltfläche in der Toolbar. Klicke auf eine der Schaltflächen, um ein Tier auszuwählen. Der Inhalt des gerade geöffneten Tabs wird dann mit dem Bild des ausgewählten Tieres ersetzt. Nachschlagen: https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Examples#beastify",
+ "homepage_url": "https://github.com/mdn/webextensions-examples/tree/master/beastify",
+ "icons": {
+ "48": "icons/beasts-48.png"
+ },
+
+ "permissions": [
+ "activeTab"
+ ],
+
+ "browser_action": {
+ "default_icon": "icons/beasts-32.png",
+ "default_title": "Beastify",
+ "default_popup": "popup/choose_beast.html"
+ },
+
+ "web_accessible_resources": [
+ "beasts/frog.jpg",
+ "beasts/turtle.jpg",
+ "beasts/snake.jpg"
+ ]
+
+}
+</pre>
+
+<ul>
+ <li>Die ersten drei Eigenschaften <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/manifest_version">manifest_version</a></code>, <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name">name</a></code>, und <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version">version</a></code> sind erforderlich und enthalten Basismetadaten.</li>
+ <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description">description</a></code> und <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url">homepage_url</a></code> sind optional aber empfohlen, sie erhalten nützliche Informationen.</li>
+ <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/icons">icons</a></code> ist optional aber empfohlen, hier kannst du ein Icon festlegen, welches im Addon-Manager angezeigt werden wird.</li>
+ <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions">permissions</a></code> listet die Berechtigungen auf, die die Erweiterung benötigt. Hier brauchen wir nur die <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/permissions#activeTab_permission">activeTab Berechtigung</a>.</li>
+ <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action">browser_action</a></code> spezifiziert die Schaltfläche. Hier übergeben wir drei Informationen:
+ <ul>
+ <li><code>default_icon</code> ist notwendig, und gibt das Icon der Schaltfläche an</li>
+ <li><code>default_title</code> ist optional und wird unter dem Icon angezeigt</li>
+ <li><code>default_popup</code> wird verwendet, wenn ein Popup angezeigt werden soll, sobald der Nutzer auf die Schaltfläche klickt. Das soll so sein, deshalb wird hier die Eigenschaft mit einer HTML-Datei belegt.</li>
+ </ul>
+ </li>
+ <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources">web_accessible_resources</a></code> listet die Dateien auf, die auf Webseiten verwendet werden solllen. Weil die Erweiterung den Inhalt der Webseite mit den Bilder, die der Erweiterung hinzugefügt wurden, verändern soll, müssen die Bilder hier aufgelistet werden.</li>
+</ul>
+
+<p>Beachte, dass alle Pfade relativ zur manifest.json angegeben werden.</p>
+
+<h3 id="Das_Icon">Das Icon</h3>
+
+<p>Die Erweiterung soll ein Icon beinhalten, das neben dem Eintrag der Erweiterung in der Add-ons-Verwaltung angezeigt wird (diese kannst du durch Aufrufen der URL "about:addons" öffnen). In manifest.json haben wir festgelegt, dass wir ein Icon für die Toolbar unter "icons/beasts-48.png" bereitstellen.</p>
+
+<p>Erstelle das "icons"-Verzeichnis and speichere dort das Icon namens "beasts-48.png".  Du kannst das <a href="https://github.com/mdn/webextensions-examples/blob/master/beastify/icons/beasts-48.png">Icon aus unserem Beispiel</a> verwenden, welches aus dem <a href="https://www.iconfinder.com/iconsets/free-retina-icon-set">Aha-Soft’s Free Retina Icon-Set</a> stammt und gemäß seiner <a href="http://www.aha-soft.com/free-icons/free-retina-icon-set/">Lizenzbestimmungen</a> genutzt wird.</p>
+
+<p>Wenn du dich entscheidest, ein eigenes Icon zu verwenden, sollte es eine Auflösung von 48x48 Pixeln besitzen. Zusätzlich kannst du ein 96x96 Pixel großes Icon für hochaufgelöste Bildschirme bereitstellen. In diesem Fall wird es unter der Eigenschaft <code>96</code> des <code>icons</code> Objekts in manifest.json aufgeführt:</p>
+
+<pre class="brush: json line-numbers language-json"><code class="language-json"><span class="key token">"icons":</span> <span class="punctuation token">{</span>
+ <span class="key token">"48":</span> <span class="string token">"icons/beasts-48.png"</span><span class="punctuation token">,</span>
+ <span class="key token">"96":</span> <span class="string token">"icons/beasts-96.png"</span>
+<span class="punctuation token">}</span></code></pre>
+
+<h3 id="Die_Toolbar-Schaltfläche">Die Toolbar-Schaltfläche</h3>
+
+<p>Die Toolbar-Schaltfläche benötigt ebenfalls ein Icon, das laut unserer manifest.json unter "icons/beasts-32.png" bereitsteht.</p>
+
+<p>Speichere ein Icon namens "beasts-32.png" im Verzeichnis "icons".Du kannst das <a href="https://github.com/mdn/webextensions-examples/blob/master/beastify/icons/beasts-32.png">Icon aus unserem Beispiel</a> verwenden, welches aus dem <a href="http://www.iconbeast.com/free">IconBeast Lite Icon-Set</a> stammt und gemäß seiner <a href="http://www.iconbeast.com/faq/">Lizenzbestimmungen</a> genutzt wird.</p>
+
+<p>Wenn du kein Popup einsetzt, dann wird ein Klick-Event zur Erweiterung gesendet, sobald der Benutzer die Schaltfläche anklickt. Wenn du hingegen ein Popup einsetzt, wird dieses Klick-Event nicht gesendet, sondern das Popup wird geöffnet. Da wir ein Popup verwenden wollen, soll dieses im nächsten Schritt erstellt werden.</p>
+
+<h3 id="Das_Popup">Das Popup</h3>
+
+<p>Mithilfe des Popups soll der Benutzer eines von drei Tieren auswählen können.</p>
+
+<p>Erstelle ein neues Verzeichnis namens "popup" in der obersten Ebene des Erweiterungsverzeichnisses. Dieses Verzeichnis wird den Code für das Popup enthalten. Das Popup besteht aus drei Dateien:</p>
+
+<ul>
+ <li><strong><code>choose_beast.html</code></strong> legt den Inhalt des Fensters fest</li>
+ <li><strong><code>choose_beast.css</code></strong> legt das Styling des Fensters fest</li>
+ <li><strong><code>choose_beast.js</code></strong> verarbeitet die Auswahl des Benutzers, indem es im aktiven Tab ein Content Script ausführt</li>
+</ul>
+
+<h4 id="choose_beast.html">choose_beast.html</h4>
+
+<p>Die HTML-Datei sieht folgendermaßen aus:</p>
+
+<pre class="brush: html">&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+ &lt;head&gt;
+ &lt;meta charset="utf-8"&gt;
+ &lt;link rel="stylesheet" href="choose_beast.css"/&gt;
+ &lt;/head&gt;
+
+ &lt;body&gt;
+ &lt;div class="button beast"&gt;Frog&lt;/div&gt;
+ &lt;div class="button beast"&gt;Turtle&lt;/div&gt;
+ &lt;div class="button beast"&gt;Snake&lt;/div&gt;
+ &lt;div class="button clear"&gt;Reset&lt;/div&gt;
+
+ &lt;script src="choose_beast.js"&gt;&lt;/script&gt;
+ &lt;/body&gt;
+
+&lt;/html&gt;</pre>
+
+<p>Es gibt ein Element für jedes Tier. Beachte, dass in dieser Datei auch die CSS- und JavaScript-Dateien verlinkt werden, genau wie auf einer Website.</p>
+
+<h4 id="choose_beast.css">choose_beast.css</h4>
+
+<p>Die CSS-Datei legt die Größe des Popups fest, stellt sicher, dass die drei Auswahlmöglichkeiten, den verfügbaren Platz ausfüllen und legt das grundlegende Styling fest:</p>
+
+<pre class="brush: css">html, body {
+ width: 100px;
+}
+
+.button {
+ margin: 3% auto;
+ padding: 4px;
+ text-align: center;
+ font-size: 1.5em;
+ cursor: pointer;
+}
+
+.beast:hover {
+ background-color: #CFF2F2;
+}
+
+.beast {
+ background-color: #E5F2F2;
+}
+
+.clear {
+ background-color: #FBFBC9;
+}
+
+.clear:hover {
+ background-color: #EAEAC9;
+}
+</pre>
+
+<h4 id="choose_beast.js">choose_beast.js</h4>
+
+<p>In der JavaScript-Datei des Popups empfangen wir Klick-Events. Wenn ein Klick auf eines der Tiere erfolgte, wird das Content Script zum aktiven Tab hinzugefügt. Sobald das Content Script geladen wird, übergeben wir ihm eine Nachricht mit der Auswahl des Tieres:</p>
+
+<pre class="brush: js">/*
+Given the name of a beast, get the URL to the corresponding image.
+*/
+function beastNameToURL(beastName) {
+ switch (beastName) {
+ case "Frog":
+ return browser.extension.getURL("beasts/frog.jpg");
+ case "Snake":
+ return browser.extension.getURL("beasts/snake.jpg");
+ case "Turtle":
+ return browser.extension.getURL("beasts/turtle.jpg");
+ }
+}
+
+/*
+Listen for clicks in the popup.
+
+If the click is on one of the beasts:
+ Inject the "beastify.js" content script in the active tab.
+
+ Then get the active tab and send "beastify.js" a message
+ containing the URL to the chosen beast's image.
+
+If it's on a button which contains class "clear":
+ Reload the page.
+ Close the popup. This is needed, as the content script malfunctions after page reloads.
+*/
+
+document.addEventListener("click", (e) =&gt; {
+ if (e.target.classList.contains("beast")) {
+ var chosenBeast = e.target.textContent;
+ var chosenBeastURL = beastNameToURL(chosenBeast);
+
+ browser.tabs.executeScript(null, {
+ file: "/content_scripts/beastify.js"
+ });
+
+ var gettingActiveTab = browser.tabs.query({active: true, currentWindow: true});
+ gettingActiveTab.then((tabs) =&gt; {
+ browser.tabs.sendMessage(tabs[0].id, {beastURL: chosenBeastURL});
+ });
+ }
+ else if (e.target.classList.contains("clear")) {
+ browser.tabs.reload();
+ window.close();
+ }
+});
+</pre>
+
+<p>It uses three WebExtensions API functions:</p>
+
+<ul>
+ <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript">browser.tabs.executeScript</a></code> to inject a content script found at "content_scripts/beastify.js" into the active tab</li>
+ <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query">browser.tabs.query</a></code> to get the active tab</li>
+ <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/sendMessage">browser.tabs.sendMessage</a></code> to send a message to content scripts running in the active tab. The message contains the URL to an image of the chosen beast.</li>
+</ul>
+
+<h3 id="The_content_script">The content script</h3>
+
+<p>Create a new directory, under the extension root, called "content_scripts" and create a new file in it called "beastify.js", with the following contents:</p>
+
+<pre class="brush: js">/*
+beastify():
+* removes every node in the document.body,
+* then inserts the chosen beast
+* then removes itself as a listener
+*/
+function beastify(request, sender, sendResponse) {
+ removeEverything();
+ insertBeast(request.beastURL);
+ browser.runtime.onMessage.removeListener(beastify);
+}
+
+/*
+Remove every node under document.body
+*/
+function removeEverything() {
+ while (document.body.firstChild) {
+ document.body.firstChild.remove();
+ }
+}
+
+/*
+Given a URL to a beast image, create and style an IMG node pointing to
+that image, then insert the node into the document.
+*/
+function insertBeast(beastURL) {
+ var beastImage = document.createElement("img");
+ beastImage.setAttribute("src", beastURL);
+ beastImage.setAttribute("style", "width: 100vw");
+ beastImage.setAttribute("style", "height: 100vh");
+ document.body.appendChild(beastImage);
+}
+
+/*
+Assign beastify() as a listener for messages from the extension.
+*/
+browser.runtime.onMessage.addListener(beastify);
+</pre>
+
+<p>The content script adds a listener to messages from the extension (specifically, from "choose_beast.js" above). In the listener, it:</p>
+
+<ul>
+ <li>removes every element in the <code>document.body</code></li>
+ <li>creates an <code>&lt;img&gt;</code> element pointing to the given URL, and inserts it into the DOM</li>
+ <li>removes the message listener.</li>
+</ul>
+
+<h3 id="The_beasts">The beasts</h3>
+
+<p>Finally, we need to include the images of the animals.</p>
+
+<p>Create a new directory called "beasts", and add the three images in that directory, with the appropriate names. You can get the images from <a href="https://github.com/mdn/webextensions-examples/tree/master/beastify/beasts">the GitHub repository</a>, or from here:</p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/11459/frog.jpg" style="display: inline-block; height: 200px; margin: 20px; width: 200px;"><img alt="" src="https://mdn.mozillademos.org/files/11461/snake.jpg" style="display: inline-block; height: 200px; margin: 20px; width: 200px;"><img alt="" src="https://mdn.mozillademos.org/files/11463/turtle.jpg" style="display: inline-block; height: 200px; margin: 20px; width: 200px;"></p>
+
+<h2 id="Testing_it_out">Testing it out</h2>
+
+<p>First, double check that you have the right files in the right places:</p>
+
+<pre>beastify/
+
+ beasts/
+ frog.jpg
+ snake.jpg
+ turtle.jpg
+
+ content_scripts/
+ beastify.js
+
+ icons/
+ beasts-32.png
+ beasts-48.png
+
+ popup/
+ choose_beast.css
+ choose_beast.html
+ choose_beast.js
+
+ manifest.json</pre>
+
+<p>Starting in Firefox 45, you can install extensions temporarily from disk.</p>
+
+<p>Open "about:debugging" in Firefox, click "Load Temporary Add-on", and select your manifest.json file. You should then see the extension's icon appear in the Firefox toolbar:</p>
+
+<p>{{EmbedYouTube("sAM78GU4P34")}}</p>
+
+<p>Open a web page, then click the icon, select a beast, and see the web page change:</p>
+
+<p>{{EmbedYouTube("YMQXyAQSiE8")}}</p>
+
+<h2 id="Developing_from_the_command_line">Developing from the command line</h2>
+
+<p>You can automate the temporary installation step by using the <a href="/en-US/Add-ons/WebExtensions/Getting_started_with_web-ext">web-ext</a> tool. Try this:</p>
+
+<pre class="brush: bash">cd beastify
+web-ext run</pre>
diff --git a/files/de/mozilla/add-ons/webextensions/extending_the_developer_tools/index.html b/files/de/mozilla/add-ons/webextensions/extending_the_developer_tools/index.html
new file mode 100644
index 0000000000..688d48f544
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/extending_the_developer_tools/index.html
@@ -0,0 +1,143 @@
+---
+title: Extending the developer tools
+slug: Mozilla/Add-ons/WebExtensions/Extending_the_developer_tools
+tags:
+ - Deutsch Guide
+ - DevTools
+ - Extentions
+ - german
+translation_of: Mozilla/Add-ons/WebExtensions/Extending_the_developer_tools
+---
+<div class="note">
+<p>Das heißt Folgendes wird nicht unterstützt , sie können Änderungen an der Seite sehen, die von Seitenskripten vorgenommen wurden.Diese Seite beschreibt devtools-APIs, wie sie in Firefox 55 vorhanden sind. Obwohl die APIs auf den Chrome devtools APIs basieren, gibt es noch viele Funktionen, die in Firefox noch nicht implementiert sind und daher hier nicht dokumentiert sind. Informationen zu den derzeit fehlenden Funktionen finden Sie unter Einschränkungen der devtools-APIs.</p>
+</div>
+
+<ul>
+ <li>Sie können WebExtensions-APIs verwenden, um die integrierten Entwicklertools des Browsers zu erweitern. Um eine devtools-Erweiterung zu erstellen, geben Sie den Schlüssel "devtools_Seite" in manifest.json ein:</li>
+ <li>
+ <pre class="brush: json">"devtools_seite": "devtools/devtools-seite.html"</pre>
+ </li>
+ <li><span style="font-size: 1rem; letter-spacing: -0.00278rem;">Der Wert dieses Schlüssels ist eine URL, die auf eine HTML-Datei verweist, die mit Ihrer Erweiterung gebündelt wurde . Die URL sollte relativ zur manifest.json-Datei selbst sein.</span></li>
+ <li>Die HTML-Datei definiert eine spezielle Seite in der Verlängerung, Seite der devtools ResourceHinzufügen
+ <h3 id="Devtools_Seite">Devtools Seite</h3>
+ </li>
+ <li><span style="font-size: 1rem; letter-spacing: -0.00278rem;">Die davetool Seite wird beim Öffnen der Browser Devtools geladen und beim Schließen entladen. Beachten Sie, dass, weil die devtools Fenster mit einem einzigen Register zugeordnet ist, es für mehr als ein devtools Fenster durchaus möglich ist - also mehr als eine devtools Seite - zur gleichen Zeit existieren.</span></li>
+</ul>
+
+<p><span style="font-size: 1rem; letter-spacing: -0.00278rem;">Die devtools-Seite hat kein sichtbares DOM, kann aber JavaScript-Quellen mit &lt;script&gt; -Tags enthalten. Die Quellen müssen mit der Erweiterung selbst gebündelt werden. Die normalen DOM-APIs, auf die über das globale Fensterobjekt zugegriffen werden kann Die gleichen WebExtension-APIs wie in Inhaltsskripten Die devtools-APIs: Devtools </span>inspiziertes Fenster devtools.network devtools.panels Beachten Sie, dass die devtools-Seite keinen Zugriff auf andere Web Extensions-APIs erhält und die Hintergrundseite keinen Zugriff auf die devtools-APIs erhält. Stattdessen müssen die davetool-Seite und die Hintergrundseite definiert werden. Verwenden der Laufzeit-Messeging-APIs. Hier ist ein Beispiel:</p>
+
+<div class="twocolumns">
+<ul>
+ <li>
+ <pre class="syntaxbox">&lt;!DOCTYPE html&gt; &lt;html&gt;   &lt;head&gt;     &lt;meta charset="utf-8"&gt;   &lt;/head&gt;   &lt;body&gt;     &lt;script sec="devtools.js"&gt;&lt;/script&gt;   &lt;/body&gt; &lt;/html&gt;The devtools.js file will hold the actual code creating your dev tools extensions.</pre>
+ </li>
+ <li>
+ <h3 id="Erstellen_von_panel">Erstellen von panel </h3>
+ </li>
+ <li>Das devtools-Fenster enthält eine Reihe separater Tools - den JavaScript-Debugger, den Netzwerkmonitor usw.  Über eine Reihe von Registerkarten am oberen Rand kann der Benutzer zwischen den verschiedenen Werkzeugen wechseln.  Das Fenster, in dem sich die Benutzeroberfläche jedes Tools befindet, wird als "Panel" bezeichnet.</li>
+ <li><code><font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">Gebrauche der </span></font>devtools.panels.create()</code> API,,  um Ihren eigenen  Panel Herzustellen in devtools Fenster(Window)</li>
+ <li>
+ <pre class="brush: js">browser.devtools.panels.create(
+ "My Panel", // title
+ "icons/star.png", // icon
+ "devtools/panel/panel.html" // content
+).then((newPanel) =&gt; {
+ newPanel.onShown.addListener(initialisePanel);
+ newPanel.onHidden.addListener(unInitialisePanel);
+});</pre>
+ </li>
+ <li>
+ <p>Hierfür sind drei Argumente erforderlich: Titel, Symbol und Inhalt des Panels.  Es wird ein Versprechen zurück gegeben, das devtool panel ExtensionPanel-Objekt aufgelöst wird, das in neue Panel darstellt.</p>
+ </li>
+ <li><code>devtools.panels.ExtensionPanel</code> dieser obieckt reprsentiert das neue Panel</li>
+ <li>
+ <h3 id="Interaktion_mit_dem_Zielfenster">Interaktion mit dem Zielfenster</h3>
+ </li>
+ <li>Die Entwicklertools sind immer an eine bestimmte Browserregisterkarte angehängt.  Dies wird als "Ziel" für die Entwicklertools oder als "inspiziertes Fenster" bezeichnet, damit können Sie inspizierten Fenster mit der Sie interagieren</li>
+ <li><code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools.inspectedWindow">devtools.inspectedWindow</a></code> API.</li>
+</ul>
+</div>
+
+<dl>
+ <dt>
+ <h3 id="Code_im_Zielfenster_ausführen">Code im Zielfenster ausführen</h3>
+ </dt>
+</dl>
+
+<p>Der<code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/devtools.inspectedWindow/eval">devtools.inspectedWindow.eval()</a></code> bereitgestellt in einfacher weisen um den Code auszuführen in den lnspector Fensten </p>
+
+<div class="blockIndicator note">
+<p class="syntaxbox">Arbeiten mit Inhaltsskripten Dies entspricht in etwa der Verwendung von {{WebExtAPIRef ("tabs.executeScript ()")}} zum Einfügen eines Inhaltsskripts, mit einem wichtigen Unterschied nommen wurden.Beachten Sie, dass eine saubere Ansicht des DOM eine Sicherheitsfunktion ist, mit der verhindert werden soll, dass feindliche Seiten Erweiterungen austricksen, indem das Verhalten nativer DOM-Funktionen neu definiert wird.  Das bedeutet, dass Sie mit eval () sehr vorsichtig sein müssen und ein normales Inhaltsskript verwenden sollten, wenn Sie können.</p>
+</div>
+
+<p>Mit devtools.inspectedWindow.eval () geladene Skripte sehen auch keine von c definierten JavaJavaScript-Variablen</p>
+
+<h3 id="Arbeiten_mit_Inhaltsskripten">Arbeiten mit Inhaltsskripten</h3>
+
+<p>devtools document hat keinen direkten Zugrif Beachten Sie, dass eine saubere Ansicht des DOM eine Sicherheitsfunktion ist, mit der verhindert werden soll, dass feindliche Seiten Erweiterungen austricksen, indem das Verhalten nativer DOM-Funktionen neu definiert wird.  Das bedeutet, dass Sie mit eval () sehr vorsichtig sein müssen und ein normales Inhaltsskript verwenden sollten, wenn Sie können.&lt;</p>
+
+<p>Bei einem Skript muss das devtools5-Dokument eine Nachricht senden, in der es aufgefordert wird, das Skript einzufügen.  Die devtools.inspectedWindow.table gibt die ID der Zielregisterkarte an:</p>
+
+<p>Wenn Sie Nachrichten zwischen den im Zielfenster ausgeführten Inhaltsskripten und einem devtools-Dokument austauschen müssen, sollten Sie {{WebExtAPIRef ("runtime.connect ()")} und {{WebExtAPIRef ("runtime.onConnect") verwenden  ")}}, um eine Verbindung zwischen der Hintergrundseite und dem devtools-Dokument herzustellen.  Die Hintergrundseite kann dann eine Zuordnung zwischen Registerkarten-IDs und {{WebExtAPIRef ("runtime.Port")}} -Objekten verwalten und diese verwenden, um Nachrichten zwischen den beiden Bereichen weiterzuleiten.</p>
+
+<p>Diese APIs basieren auf den Chrome devtools-APIs, aber im Vergleich zu Chrome fehlen noch viele Funktionen.  In diesem Abschnitt werden die Funktionen aufgeführt, die ab Firefox 54 noch nicht implementiert sind. Beachten Sie, dass sich die devtools-APIs in der aktiven Entwicklung befinden und wir erwarten, dass die meisten davon in zukünftigen Versionen unterstützt werden.</p>
+
+<ul>
+ <li>
+ <pre class="brush: js">// devtools-panel.js
+
+const scriptToAttach = "document.body.innerHTML = 'Hi from the devtools';";
+
+window.addEventListener("click", () =&gt; {
+ browser.runtime.sendMessage({
+ tabId: browser.devtools.inspectedWindow.tabId,
+ script: scriptToAttach
+ });
+});</pre>
+ </li>
+ <li>
+ <pre class="brush: js">// background.js
+
+function handleMessage(request, sender, sendResponse) {
+ browser.tabs.executeScript(request.tabId, {
+ code: request.script
+ });
+}
+
+browser.runtime.onMessage.addListener(handleMessage);</pre>
+ </li>
+ <li><img alt="" src="https://mdn.mozillademos.org/files/14923/devtools-content-scripts.png" style="display: block; height: 416px; margin-left: auto; margin-right: auto; width: 600px;"></li>
+ <li>
+ <h2 id="Einschränkungen_der_devtools_APIs">Einschränkungen der devtools APIs</h2>
+ </li>
+ <li>
+ <h3 id="devtools_inspizierte_Window">devtools inspizierte Window</h3>
+ </li>
+ <li>Folgendes wird nicht unterstüzt</li>
+ <li><code>inspectedWindow.getResources()</code></li>
+ <li><code>inspectedWindow.onResourceAdded</code></li>
+ <li><code>inspectedWindow.onResourceContentCommitted</code></li>
+ <li>None of the options to <code>inspectedWindow.eval()</code> are supported.</li>
+ <li>Scripts injected using <code>inspectedWindow.eval()</code> can't use all the Console's command-line helper functions, but <code>$0</code> and <code>inspect(...)</code> are both supported (starting from Firefox 55).</li>
+ <li>
+ <h3 id="devtools.panele">devtools.panele</h3>
+ </li>
+ <li>The following are not supported:</li>
+ <li><code>panels.elements</code></li>
+ <li><code>panels.sources</code></li>
+ <li><code>panels.setOpenResourceHandler()</code></li>
+ <li><code>panels.openResource()</code></li>
+ <li><code>panels.ExtensionPanel.createStatusBarButton()</code></li>
+ <li><code>panels.Button</code></li>
+ <li><code>panels.ElementsPanel</code></li>
+ <li><code>panels.SourcesPanel</code></li>
+ <li>
+ <h3 id="Beispielsweise">Beispielsweise</h3>
+ </li>
+ <li>Das <a href="https://github.com/mdn/webextensions-examples">webextensions-examples</a> bericht an GitHub, enthält einige Beispiele für Erweiterungen, die devtools-Panels verwenden:</li>
+ <li>
+ <p><a href="https://github.com/mdn/webextensions-examples/blob/master/devtools-panels/">devtools-panels</a> benutzen Sie dentools Panels</p>
+ </li>
+</ul>
+
+<p><span style="display: none;"> </span></p>
diff --git a/files/de/mozilla/add-ons/webextensions/index.html b/files/de/mozilla/add-ons/webextensions/index.html
new file mode 100644
index 0000000000..bb1b68b2de
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/index.html
@@ -0,0 +1,86 @@
+---
+title: WebExtensions
+slug: Mozilla/Add-ons/WebExtensions
+translation_of: Mozilla/Add-ons/WebExtensions
+---
+<div>{{AddonSidebar}}</div>
+
+<p>WebExtensions sind ein Cross-Browser-System zur Entwicklung von Browser-Add-ons. Das System ist in weiten Teilen kompatibel mit der <a class="external-icon external" href="https://developer.chrome.com/extensions">extension API</a>, welche von Google Chrome und Opera unterstützt wird. Erweiterungen, welche für diese Browser geschrieben wurden, werden in den meisten Fällen mit <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Porting_from_Google_Chrome">nur wenigen Anpassungen</a> auch in Firefox oder <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/documentation/extensions/">Microsoft Edge</a> lauffähig sein. Die API ist außerdem vollständig kompatibel mit <a href="https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox">Multiprozess-Firefox</a>.</p>
+
+<p>Wir beabsichtigen auch, die APIs zu erweitern, um die Unterstützung für Add-on-Entwickler zu verbessern. Sollten Sie Vorschläge dazu haben, würden wir uns über Ihre Mitteilung freuen. Sie erreichen uns über die englischsprachige <a href="https://mail.mozilla.org/listinfo/dev-addons">Mailingliste für Add-on-Entwickler</a> oder auf <a href="irc://irc.mozilla.org/webextensions">#webextensions</a> im <a href="https://wiki.mozilla.org/IRC">IRC</a>.</p>
+
+<div class="row topicpage-table">
+<div class="section">
+<h3 id="Erste_Schritte">Erste Schritte</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/What_are_WebExtensions_">Was sind WebExtensions?</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Your_first_WebExtension">Deine erste WebExtension</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Your_second_WebExtension">Deine zweite WebExtension</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension">Anatomie einer WebExtension</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Examples">Beispiel-WebExtensions</a></li>
+</ul>
+
+<h3 id="Kurzanleitungen">Kurzanleitungen</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Intercept_HTTP_requests">Abfangen von HTTP-Anfragen</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Modify_a_web_page">Eine Web-Seite verändern</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Add_a_button_to_the_toolbar">Eine Schaltfläche zu einer Werkzeugleiste hinzufügen</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Implement_a_settings_page">Eine Einstellungen-Seite erstellen</a></li>
+ <li>Browser-Tabs beeinflussen</li>
+ <li>Zugreifen auf und verändern von Lesezeichen</li>
+ <li>Zugreifen auf und verändern von Cookies</li>
+</ul>
+
+<h3 id="Konzepte">Konzepte</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Using_the_JavaScript_APIs">Verwendung der JavaScript-APIs</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Content_scripts">Content scripts</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Match_patterns">Match patterns</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Internationalization">Internationalisierung</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy">Content Security Policy</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging">Native messaging</a></li>
+</ul>
+
+<h3 id="Portieren">Portieren</h3>
+
+<ul>
+ <li><a href="/en-US/Add-ons/WebExtensions/Porting_from_Google_Chrome">Portieren einer Google Chrome-Erweiterung</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Porting_a_legacy_Firefox_add-on">Portieren eines veralteten Firefox Add-ons</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Embedded_WebExtensions">Eingebettete WebExtensions</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Comparison_with_the_Add-on_SDK">Vergleich mit dem Add-on SDK</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Comparison_with_XUL_XPCOM_extensions">Vergleich mit XUL/XPCOM-Erweiterungen</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Chrome_incompatibilities">Inkompatibilitäten mit Chrome</a></li>
+</ul>
+
+<h3 id="Firefox_workflow">Firefox workflow</h3>
+
+<ul>
+ <li><a href="/en-US/Add-ons/WebExtensions/Temporary_Installation_in_Firefox">Installation</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Debugging">Debugging</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Getting_started_with_web-ext">Einstieg in Web-Ext</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/web-ext_command_reference">Web-Ext Befehlsreferenz</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/WebExtensions_and_the_Add-on_ID">WebExtensions und die Add-On-ID</a></li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Publishing_your_WebExtension">Veröffentlichen deiner WebExtension</a></li>
+</ul>
+</div>
+
+<div class="section">
+<h3 id="Referenz">Referenz</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API">JavaScript-API-Überblick</a></li>
+ <li><a href="/en-US/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs">Tabellen zur Browser-Kompatibilität zu JavaScript-APIs</a></li>
+</ul>
+
+<h4 id="JavaScript_APIs">JavaScript APIs</h4>
+
+<div class="twocolumns">{{ ListSubpages ("/en-US/Add-ons/WebExtensions/API") }}</div>
+
+<h4 id="Manifest_keys">Manifest keys</h4>
+
+<div class="twocolumns">{{ ListSubpages ("/en-US/Add-ons/WebExtensions/manifest.json") }}</div>
+</div>
+</div>
diff --git a/files/de/mozilla/add-ons/webextensions/manifest.json/commands/index.html b/files/de/mozilla/add-ons/webextensions/manifest.json/commands/index.html
new file mode 100644
index 0000000000..6222b35145
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/manifest.json/commands/index.html
@@ -0,0 +1,184 @@
+---
+title: commands
+slug: Mozilla/Add-ons/WebExtensions/manifest.json/commands
+tags:
+ - Add-ons Erweiterungen WebExtensions
+translation_of: Mozilla/Add-ons/WebExtensions/manifest.json/commands
+---
+<div>{{AddonSidebar}}</div>
+
+<table class="fullwidth-table standard-table">
+ <tbody>
+ <tr>
+ <th scope="row" style="width: 30%;">Typ</th>
+ <td><code>Objekt</code></td>
+ </tr>
+ <tr>
+ <th scope="row">Obligatorisch</th>
+ <td>Nein</td>
+ </tr>
+ <tr>
+ <th scope="row">Beispiel</th>
+ <td>
+ <pre class="brush: json no-line-numbers">
+"commands": {
+ "toggle-feature": {
+ "suggested_key": {
+ "default": "Ctrl+Shift+Y",
+ "linux": "Ctrl+Shift+U"
+ },
+ "description": "Ereignis 'toggle-feature' senden"
+ }
+}</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Verwenden Sie den<code>commands-Schlüssel, um für Ihre Erweiterung eine oder mehrere Tastenkürzel zu definieren</code>.</p>
+
+<p>Jedes Tastenkürzel wird mit einem Namen, eine Kombination von Tasten und einer Beschreibung definiert. Sobald Sie einige Befehle in der manifest.json definiert haben, können Sie die zugewiesenen Tastenkombinationen mittels der JavaScript-API  {{WebExtAPIRef("commands")}} verwenden.</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<p>Der <code>commands-Schlüssel</code>ist ein Objekt, und jedes Tastenkürzel ist eine Eigenschaft von ihm. Der Name der Eigenschaft ist der Name des Tastenkürzels.</p>
+
+<p>Jedes Tastenkürzel ist selbst ein Objekt, das bis zu zwei Eigenschaften hat:</p>
+
+<ul>
+ <li><code>suggested_key</code>: diese definiert die Tastenkombination</li>
+ <li><code>description</code>: eine Zeichenkette, die dieses Tastenkürzel beschreibt</li>
+</ul>
+
+<p>Die Eigenschaft <code>suggested_key</code> ist selbst ein Objekt, das folgende Eigenschaften haben kann, die alle Zeichenketten sind:</p>
+
+<ul>
+ <li><code>"default"</code>, <code>"mac"</code>, <code>"linux"</code>, <code>"windows"</code>, <code>"chromeos"</code>, <code>"android"</code>, <code>"ios"</code></li>
+</ul>
+
+<p>Der Wert jeder Eigenschaft ist das Tastenkürzel für den Befehl auf der angegebenen Plattform, der als Zeichenkette angegeben wird, die die durch ein „+“ voneinander getrennten Tasten enthält. Der Wert für <code>„default“</code> wird auf allen Plattformen verwendet, die nicht ausdrücklich angegeben sind.</p>
+
+<p>Beispiel:</p>
+
+<pre class="brush: json no-line-numbers">"commands": {
+ "toggle-feature": {
+ "suggested_key": {
+ "default": "Alt+Shift+U",
+ "linux": "Ctrl+Shift+U"
+ },
+ "description": "'toggle-feature'-Ereignis an die Erweiterung senden"
+ },
+ "do-another-thing": {
+ "suggested_key": {
+ "default": "Ctrl+Shift+Y"
+ }
+ }
+}</pre>
+
+<p>Dies definiert zwei Tastenkürzel:</p>
+
+<ul>
+ <li>eine mit dem Namen "toggle-feature", auf die mit Hilfe von <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>U</kbd> auf Linux und <kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>U</kbd> auf allen anderen Plattformen zugegriffen wird</li>
+ <li>eine mit dem Namen "do-another-thing", auf die mit Hilfe von <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Y</kbd> auf allen Plattformen zugegriffen wird.</li>
+</ul>
+
+<p>Sie könnten dann den ersten dieser Befehle mit einem Code wie diesen verwenden:</p>
+
+<pre class="brush: js no-line-numbers">browser.commands.onCommand.addListener(function(command) {
+ if (command == "toggle-feature") {
+ console.log("toggling the feature!");
+ }
+});</pre>
+
+<h3 id="Besondere_Tastenkürzel">Besondere Tastenkürzel</h3>
+
+<p>Es gibt drei besondere Tastenkürzel:</p>
+
+<ul>
+ <li>_execute_browser_action: funktioniert wie ein Klick auf die <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_action">Browseraktion</a> der Erweiterung.</li>
+ <li>_execute_page_action: funktioniert wie ein Klick auf die <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Page_actions">Seitenaktion</a> der Erweiterung.</li>
+ <li>_execute_sidebar_action: öffnet die <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Sidebars">Seitenleiste</a> der Erweiterung. Wird nur in Firefox unterstützt und erst ab Firefox Version 54.</li>
+</ul>
+
+<p>Dies definiert zum Beispiel eine Tastenkombination, um auf die Browseraktion der Erweiterung zu klicken:</p>
+
+<pre class="brush: js no-line-numbers">"commands": {
+ "_execute_browser_action": {
+ "suggested_key": {
+ "default": "Ctrl+Shift+Y"
+ }
+ }
+}</pre>
+
+<h2 id="Tastenkürzel-Werte">Tastenkürzel-Werte</h2>
+
+<p>Es gibt zwei gültige Formate für Tastenkürzel: als Tastenkombination oder als Medien-Taste.</p>
+
+<h3 id="Tastenkombinationen">Tastenkombinationen</h3>
+
+<div class="pull-aside">
+<div class="moreinfo">Auf Macs wird "Ctrl" als  "Command"-Taste interpretiert, geben Sie also "MacCrtl" an, wenn Sie eigentlich "Ctrl" brauchen.</div>
+</div>
+
+<p>Tastenkombinationen müssen aus zwei oder mehr Tasten bestehen:</p>
+
+<ul>
+ <li><strong>Modifikator </strong>(obligatorisch, mit Ausnahme der Funktionstasten). Dieser kann sein: "Ctrl", "Alt", "Command", "MacCtrl".</li>
+ <li><strong>zweiter Modifikator</strong> (optional). Wenn angegeben, muss dieser entweder "Shift" oder (für Firefox ≥ 63)  "Ctrl", "Alt", "Command" und "MacCtrl" sein, wenn sie nicht als Hauptmodifikator verwendet werden.</li>
+ <li><strong>Taste </strong>(obligatorisch). Die kann sein:
+ <ul>
+ <li>die Buchstaben A-Z</li>
+ <li>die Zahlen 0-9</li>
+ <li>die Funktionstasten F1-F12</li>
+ <li>Comma (Komma), Period (Punkt), Home (Pos1), End (Ende), PageUp (Bild hoch) , PageDown (Bild runter), Space (Leertaste), Insert (Einfg), Delete (Entf), Up (Pfeil hoch), Down (Pfeil runter), Left (Pfeil links), Right (Pfeil rechts)</li>
+ </ul>
+ </li>
+</ul>
+
+<p>Die Taste wird dann als Zeichenkette angegeben, die den Satz an Tastenwerten enthält, in der oben angegebenen Reihenfolge, getrennt durch "+": zum Beispiel "Ctrl+Shift+Z".</p>
+
+<p>Wenn eine Tastenkombination bereits vom Browser (zum Beispiel "Ctrl+P") oder durch ein bestehendes Add-on verwendet wird, können Sie sie nicht überschreiben. Sie dürfen sie definieren, aber Ihr Eventhandler wird nicht aufgerufen, wenn der Benutzer sie eingibt.</p>
+
+<h3 id="Medientasten">Medientasten</h3>
+
+<p>Alternativ kann das Tastenkürzel als eine der folgenden Medientasten angegeben werden:</p>
+
+<ul>
+ <li>"MediaNextTrack", "MediaPlayPause", "MediaPrevTrack", "MediaStop"</li>
+</ul>
+
+<h2 id="Beispiel">Beispiel</h2>
+
+<p>Definieren Sie ein einzelnes Tastenkürzel, das nur standardmäßig verwendet wird:</p>
+
+<pre class="brush: json no-line-numbers">"commands": {
+ "toggle-feature": {
+ "suggested_key": {
+ "default": "Ctrl+Shift+Y"
+ },
+ "description": "Ereignis'toggle-feature' senden"
+ }
+}</pre>
+
+<p>Definieren Sie zwei Tastenkürzel, eins mit einer plattformspezifischen Tastenkombination:</p>
+
+<pre class="brush: json no-line-numbers">"commands": {
+ "toggle-feature": {
+ "suggested_key": {
+ "default": "Alt+Shift+U",
+ "linux": "Ctrl+Shift+U"
+ },
+ "description": "Ereignis 'toggle-feature' senden"
+ },
+ "do-another-thing": {
+ "suggested_key": {
+ "default": "Ctrl+Shift+Y"
+ }
+ }
+}</pre>
+
+<h2 id="Browserkompatibilität">Browserkompatibilität</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("webextensions.manifest.commands")}}</p>
diff --git a/files/de/mozilla/add-ons/webextensions/manifest.json/devtools_page/index.html b/files/de/mozilla/add-ons/webextensions/manifest.json/devtools_page/index.html
new file mode 100644
index 0000000000..1b4afb1cfa
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/manifest.json/devtools_page/index.html
@@ -0,0 +1,42 @@
+---
+title: devtools_page
+slug: Mozilla/Add-ons/WebExtensions/manifest.json/devtools_page
+translation_of: Mozilla/Add-ons/WebExtensions/manifest.json/devtools_page
+---
+<div>{{AddonSidebar}}</div>
+
+<table class="fullwidth-table standard-table">
+ <tbody>
+ <tr>
+ <th scope="row" style="width: 30%;">Type</th>
+ <td><code>String</code></td>
+ </tr>
+ <tr>
+ <th scope="row">Mandatory</th>
+ <td>No</td>
+ </tr>
+ <tr>
+ <th scope="row">Example</th>
+ <td>
+ <pre class="brush: json no-line-numbers">
+"devtools_page": "devtools/my-page.html"</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Use this key to enable your extension to extend the browser's built-in devtools.</p>
+
+<p>This key is defined as a URL to an HTML file. The HTML file must be bundled with the extension, and the URL is relative to the extension's root.</p>
+
+<p>See <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Extending_the_developer_tools">Extending the developer tools</a> to learn more.</p>
+
+<h2 id="Example">Example</h2>
+
+<pre class="brush: json no-line-numbers">"devtools_page": "devtools/my-page.html"</pre>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("webextensions.manifest.devtools_page")}}</p>
diff --git a/files/de/mozilla/add-ons/webextensions/manifest.json/index.html b/files/de/mozilla/add-ons/webextensions/manifest.json/index.html
new file mode 100644
index 0000000000..10a4fd8597
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/manifest.json/index.html
@@ -0,0 +1,105 @@
+---
+title: manifest.json
+slug: Mozilla/Add-ons/WebExtensions/manifest.json
+tags:
+ - Add-ons
+ - Extensions
+ - NeedsTranslation
+ - TopicStub
+ - WebExtensions
+translation_of: Mozilla/Add-ons/WebExtensions/manifest.json
+---
+<div>{{AddonSidebar}}</div>
+
+<p>Die Datei manifest.json ist eine <a href="/en-US/docs/Glossary/JSON">JSON</a>-formatierte Datei, und die einzige Datei, die eine Erweiterung, die das WebExtensions API verwendet, unterstützt.</p>
+
+<p>Durch das Verwenden von manifest.json, legst du Metadaten, wie zum Beispiel Name und Version, für deine Erweiterung fest, und kannst auch einige Aspekte der Funktionalität deiner Erweiterung,wie zum Beispiel Hintergrundskripte, Inhaltsskripte und Browserationen.</p>
+
+<p>Manifest.json keys sind unten gelistet:</p>
+
+<div class="twocolumns">{{ ListSubpages ("/en-US/Add-ons/WebExtensions/manifest.json") }}</div>
+
+<div class="twocolumns"> </div>
+
+<p><code>"manifest_version"</code>, <code>"version"</code>, und <code>"name"</code> sind die einzigen verpflichtenden Keys. <code>"default_locale"</code> muss vorhanden sein, wenn der "_locales"-Ordner vorhanden ist und darf sonst nicht vorhanden sein. <code>"applications"</code> wird von Google Chrome nicht unterstützt, und ist verpflichtend in Firefox vor Firefox 48 und Firefox für Android.</p>
+
+<h2 id="Browserkompatiblität">Browserkompatiblität</h2>
+
+<p>{{Compat("webextensions.manifest")}}</p>
+
+<h2 id="Beispiel">Beispiel</h2>
+
+<p>Hier ein kurzes Syntax-Beispiel für manifest.json:</p>
+
+<pre class="brush: json">{
+ "applications": {
+ "gecko": {
+ "id": "addon@example.com",
+ "strict_min_version": "42.0"
+ }
+ },
+
+ "background": {
+ "scripts": ["jquery.js", "my-background.js"],
+ "page": "my-background.html"
+ },
+
+ "browser_action": {
+ "default_icon": {
+ "19": "button/geo-19.png",
+ "38": "button/geo-38.png"
+ },
+ "default_title": "Whereami?",
+ "default_popup": "popup/geo.html"
+ },
+
+ "commands": {
+ "toggle-feature": {
+  "suggested_key": {
+    "default": "Ctrl+Shift+Y",
+    "linux": "Ctrl+Shift+U"
+  },
+     "description": "Send a 'toggle-feature' event"
+ }
+ },
+
+ "content_security_policy": "script-src 'self' https://example.com; object-src 'self'",
+
+ "content_scripts": [
+ {
+ "exclude_matches": ["*://developer.mozilla.org/*"],
+ "matches": ["*://*.mozilla.org/*"],
+ "js": ["borderify.js"]
+ }
+ ],
+
+ "default_locale": "en",
+
+ "description": "...",
+
+ "icons": {
+ "48": "icon.png",
+ "96": "icon@2x.png"
+ },
+
+ "manifest_version": 2,
+
+ "name": "...",
+
+ "page_action": {
+ "default_icon": {
+ "19": "button/geo-19.png",
+ "38": "button/geo-38.png"
+ },
+ "default_title": "Whereami?",
+ "default_popup": "popup/geo.html"
+ },
+
+ "permissions": ["webNavigation"],
+
+ "version": "0.1",
+
+ "web_accessible_resources": ["images/my-image.png"]
+}</pre>
+
+<p> </p>
diff --git a/files/de/mozilla/add-ons/webextensions/manifest.json/theme/index.html b/files/de/mozilla/add-ons/webextensions/manifest.json/theme/index.html
new file mode 100644
index 0000000000..30825db592
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/manifest.json/theme/index.html
@@ -0,0 +1,1361 @@
+---
+title: theme
+slug: Mozilla/Add-ons/WebExtensions/manifest.json/theme
+translation_of: Mozilla/Add-ons/WebExtensions/manifest.json/theme
+---
+<div>{{AddonSidebar}}</div>
+
+<table class="fullwidth-table standard-table">
+ <tbody>
+ <tr>
+ <th scope="row" style="width: 30%;">Type</th>
+ <td><code>Object</code></td>
+ </tr>
+ <tr>
+ <th scope="row">Mandatory</th>
+ <td>No</td>
+ </tr>
+ <tr>
+ <th scope="row">Example</th>
+ <td>
+ <pre class="brush: json notranslate">
+"theme": {
+ "images": {
+ "theme_frame": "images/sun.jpg"
+ },
+ "colors": {
+ "frame": "#CF723F",
+ "tab_background_text": "#000"
+ }
+}</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Use the theme key to define a static theme to apply to Firefox.</p>
+
+<div class="note">
+<p><strong>Note</strong>: If you want to include a theme with an extension, please see the {{WebExtAPIRef("theme")}} API.</p>
+</div>
+
+<div class="note">
+<p><strong>Note</strong>: Since May 2019, themes need to be signed to be installed ({{bug(1545109)}}).  See <a href="/en-US/docs/Mozilla/Add-ons/Distribution">Signing and distributing your add-on</a> for more details.</p>
+</div>
+
+<div class="note">
+<p><strong>Theme support in Firefox for Android</strong>: A new version of Firefox for Android, based on GeckoView, is under development. A <a href="https://play.google.com/store/apps/details?id=org.mozilla.fenix" rel="noreferrer nofollow">pre-release version</a> is available. The pre-release version does not support themes.</p>
+</div>
+
+<h2 id="Image_formats">Image formats</h2>
+
+<p>The following image formats are supported in all theme image properties:</p>
+
+<ul>
+ <li>JPEG</li>
+ <li>PNG</li>
+ <li>APNG</li>
+ <li>SVG (animated SVG is supported from Firefox 59)</li>
+ <li>GIF (animated GIF isn’t supported)</li>
+</ul>
+
+<h2 id="Syntax">Syntax</h2>
+
+<p>The theme key is an object that takes the following properties:</p>
+
+<table class="fullwidth-table standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Name</th>
+ <th scope="col">Type</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>images</code></td>
+ <td><code>Object</code></td>
+ <td>
+ <p>Optional as of Firefox 60. Mandatory before Firefox 60.</p>
+
+ <p>A JSON object whose properties represent the images to display in various parts of the browser. See <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/theme#images">images</a></code> for details on the properties that this object can contain.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>colors</code></td>
+ <td><code>Object</code></td>
+ <td>
+ <p>Mandatory.</p>
+
+ <p>A JSON object whose properties represent the colors of various parts of the browser. See <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/theme#colors">colors</a></code> for details on the properties that this object can contain.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>properties</code></td>
+ <td><code>Object</code></td>
+ <td>
+ <p>Optional</p>
+
+ <p>This object has two properties that affect how the <code>"additional_backgrounds"</code> images are displayed. See <code><a href="/en-US/Add-ons/WebExtensions/manifest.json/theme#properties">properties</a></code> for details on the properties that this object can contain.</p>
+
+ <ul>
+ <li><code>"additional_backgrounds_alignment":</code> an array of enumeration values defining the alignment of the corresponding <code>"additional_backgrounds":</code> array item.<br>
+ The alignment options include: <code>"bottom"</code>, <code>"center"</code>, <code>"left"</code>, <code>"right"</code>, <code>"top"</code>, <code>"center bottom"</code>, <code>"center center"</code>, <code>"center top"</code>, <code>"left bottom"</code>, <code>"left center"</code>, <code>"left top"</code>, <code>"right bottom"</code>, <code>"right center"</code>, and <code>"right top"</code>. If not specified, defaults to <code>"right top"</code>.<br>
+ Optional</li>
+ <li><code>"additional_backgrounds_tiling":</code> an array of enumeration values defining how the corresponding <code>"additional_backgrounds":</code> array item repeats, with support for <code>"no-repeat"</code>, <code>"repeat"</code>, <code>"repeat-x"</code>, and <code>"repeat-y"</code>. If not specified, defaults to <code>"no-repeat"</code>.<br>
+ Optional</li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="images">images</h3>
+
+<p dir="ltr">All URLs are relative to the manifest.json file and cannot reference an external URL.</p>
+
+<p dir="ltr">Images should be 200 pixels high to ensure they always fill the header space vertically.</p>
+
+<table class="fullwidth-table standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Name</th>
+ <th scope="col">Type</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>headerURL </code> <code>{{Deprecated_Inline}}</code></td>
+ <td><code>String</code></td>
+ <td>
+ <div class="blockIndicator warning">
+ <p><code>headerURL</code> has been removed in Firefox 70. You will begin to get warnings in Firefox 65 and later if you load a theme that uses this property. Use <code>theme_frame</code> instead.</p>
+ </div>
+
+ <p>The URL of a foreground image to be added to the header area and anchored to the upper right corner of the header area.</p>
+
+ <p>Optional in desktop Firefox from Firefox 60 onwards. One of <code>theme_frame</code> or <code>headerURL</code> had to be specified before Firefox 60. Note also that in Firefox 60 onwards, any {{cssxref("text-shadow")}} applied to the header text is removed if no <code>headerURL</code> is specified (see {{bug(1404688)}}).</p>
+
+ <p>In Firefox for Android, <code>headerURL</code> or <code>theme_frame</code>  must be specified.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>theme_frame</code></td>
+ <td><code>String</code></td>
+ <td>
+ <p>The URL of a foreground image to be added to the header area and anchored to the upper right corner of the header area.</p>
+
+ <div class="blockIndicator note">
+ <p>Chrome anchors the image to the top left of the header and if the image doesn’t fill the header area tile the image.</p>
+ </div>
+
+ <p>Optional in desktop Firefox 60 onwards. One of <code>theme_frame</code> or <code>headerURL</code> had to be specified before Firefox 60.</p>
+
+ <p>In Firefox for Android, <code>headerURL</code> or <code>theme_frame</code>  must be specified.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>additional_backgrounds</code></td>
+ <td><code>Array </code>of <code>String</code></td>
+ <td>
+ <div class="warning">
+ <p>The <code>additional_backgrounds</code> property is experimental. It is currently accepted in release versions of Firefox, but its behavior is subject to change. It is not supported in Firefox for Android.</p>
+ </div>
+
+ <p>An array of URLs for additional background images to be added to the header area and displayed behind the <code>"theme_frame":</code> image. These images layer the first image in the array on top, the last image in the array at the bottom.</p>
+
+ <p>Optional.</p>
+
+ <p>By default all images are anchored to the upper right corner of the header area, but their alignment and repeat behavior can be controlled by properties of <code>"properties":</code>.</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="colors">colors</h3>
+
+<p>These properties define the colors used for different parts of the browser. They are all optional (but note that <code>"accentcolor"</code> and <code>"textcolor"</code> were mandatory in Firefox before version 63).  How these properties affect the Firefox UI  is shown here:</p>
+
+<table class="fullwidth-table standard-table">
+ <tbody>
+ <tr>
+ <td style="background-color: white;">
+ <p><img alt="Overview of the color properties and how they apply to Firefox UI components" src="https://mdn.mozillademos.org/files/16855/Themes_components_annotations.png" style="height: 1065px; width: 1521px;"></p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<div class="blockIndicator note">
+<p>Where a component is affected by multiple color properties, the properties are listed in order of precedence.</p>
+</div>
+
+<p>All these properties can be specified as either a string containing any valid <a href="/en-US/docs/Web/CSS/color_value">CSS color string</a> (including hexadecimal), or an RGB array, such as <code>"tab_background_text": [ 107 , 99 , 23 ]</code>.</p>
+
+<div class="blockIndicator note">
+<p><a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/theme#Chrome_compatibility">In Chrome, colors may only be specified as RGB arrays</a>.</p>
+
+<p>In Firefox for Android colors can be specified using:</p>
+
+<ul>
+ <li>full hexadecimal notation, that is #RRGGBB only. <em>alpha</em> and shortened syntax, as in #RGB[A], are not supported.</li>
+ <li><a href="/en-US/docs/Web/CSS/color_value#Syntax_2">Functional notation</a> (RGB arrays) for themes targeting Firefox 68.2 or later.</li>
+</ul>
+
+<p>Colors for Firefox for Android themes cannot be specified using color names.</p>
+</div>
+
+<table class="fullwidth-table standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Name</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <p><code>accentcolor</code><code> {{Deprecated_Inline}}</code></p>
+ </td>
+ <td>
+ <div class="blockIndicator warning">
+ <p><code>accentcolor</code> has been removed in Firefox 70. You will begin to get warnings in Firefox 65 and later if you load a theme that uses this property. Use the <code>frame</code> property instead.</p>
+ </div>
+
+ <p>The color of the header area background, displayed in the part of the header not covered or visible through the images specified in <code>"headerURL"</code> and <code>"additional_backgrounds"</code>.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "accentcolor": "red",
+     "tab_background_text": "white"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15871/theme-accentcolor.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>bookmark_text</code></td>
+ <td>
+ <p>The color of text and icons in the bookmark and find bars. Also, if <code>tab_text</code> isn't defined it sets the color of the active tab text and if <code>icons</code> isn't defined the color of the toolbar icons. Provided as Chrome compatible alias for <code>toolbar_text</code>.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure any color used contrasts well with those used in <code>frame</code> and <code>frame_inactive</code> or <code>toolbar</code> if you're using that property.</p>
+
+ <p>Where <code>icons</code> isn't defined, also ensure good contrast with<code> button_background_active</code> and <code>button_background_hover</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+ "tab_background_text": "white",
+    "tab_text": "white",
+    "toolbar": "black",
+    "bookmark_text": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="Example use of the bookmark_text color property" src="https://mdn.mozillademos.org/files/16668/theme-bookmark_text.png"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>button_background_active</code></td>
+ <td>
+ <p>The color of the background of the pressed toolbar buttons.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "button_background_active": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15872/theme-button_background_active.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>button_background_hover</code></td>
+ <td>
+ <p>The color of the background of the toolbar buttons on hover.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "button_background_hover": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15873/theme-button_background_hover.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>icons</code></td>
+ <td>
+ <p>The color of toolbar icons, excluding those in the find toolbar.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with those used in <code>frame</code>,  <code>frame_inactive</code>, <code>button_background_active</code>, and <code>button_background_hover</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "icons": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15874/theme-icons.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>icons_attention</code></td>
+ <td>
+ <p>The color of toolbar icons in attention state such as the starred bookmark icon or finished download icon.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with those used in <code>frame</code>,  <code>frame_inactive</code>, <code>button_background_active</code>, and <code>button_background_hover</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "icons_attention": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15875/theme-icons_attention.png" style="height: 324px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>frame</code></td>
+ <td>
+ <p>The color of the header area background, displayed in the part of the header not covered or visible through the images specified in <code>"theme_frame"</code> and <code>"additional_backgrounds"</code>.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "red",
+     "tab_background_text": "white"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15871/theme-accentcolor.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>frame_inactive</code></td>
+ <td>
+ <p>The color of the header area background when the browser window is inactive, displayed in the part of the header not covered or visible through the images specified in <code>"theme_frame"</code> and <code>"additional_backgrounds"</code>.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "red",
+ "frame_inactive": "gray",
+     "tab_text": "white"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="Example use of the frame_inactive color property" src="https://mdn.mozillademos.org/files/16669/theme-frame_inactive.png" style="height: 193px; width: 752px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>ntp_background</code></td>
+ <td>
+ <p>The new tab page background color.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "ntp_background": "red",
+     "ntp_text": "white"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/16175/ntp_colors.png" style="display: block; height: 190px; margin: 0 auto;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>ntp_text</code></td>
+ <td>
+ <p>The new tab page text color.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with that used in <code>ntp_background</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "ntp_background": "red",
+ "ntp_text": "white"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/16175/ntp_colors.png" style="display: block; height: 190px; margin: 0 auto;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>popup</code></td>
+ <td>
+ <p>The background color of popups (such as the url bar dropdown and the arrow panels).</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "popup": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15876/theme-popup.png" style="height: 324px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>popup_border</code></td>
+ <td>
+ <p>The border color of popups.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "popup": "black",
+     "popup_text": "white",
+     "popup_border": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15877/theme-popup_border.png" style="height: 324px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>popup_highlight</code></td>
+ <td>
+ <p>The background color of items highlighted using the keyboard inside popups (such as the selected url bar dropdown item).</p>
+
+ <div class="blockIndicator note">
+ <p>It's recommended to define <code>popup_highlight_text</code> to override the browser default text color on various platforms.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "popup_highlight": "red",
+ "popup_highlight_text": "white"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15878/theme-popup_highlight.png" style="height: 490px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>popup_highlight_text</code></td>
+ <td>
+ <p>The text color of items highlighted inside popups.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with that used in <code>popup_highlight</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "popup_highlight": "black",
+     "popup_highlight_text": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15879/theme-popup_highlight_text.png" style="height: 490px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>popup_text</code></td>
+ <td>
+ <p>The text color of popups.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with that used in <code>popup</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "popup": "black",
+     "popup_text": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15880/popup_text.png" style="height: 490px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>sidebar</code></td>
+ <td>
+ <p>The background color of the sidebar.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "sidebar": "red",
+     "sidebar_highlight": "white",
+     "sidebar_highlight_text": "green",
+ "sidebar_text": "white"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/16176/sidebar_colors.png" style="display: block; margin: 0 auto; width: 250px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>sidebar_border</code></td>
+ <td>
+ <p>The border and splitter color of the browser sidebar</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "sidebar_border": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/16177/Screen_Shot_2018-09-16_at_6.13.31_PM.png" style="display: block; height: 286px; margin: 0px auto; width: 300px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>sidebar_highlight</code></td>
+ <td>
+ <p>The background color of highlighted rows in built-in sidebars</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "sidebar_highlight": "red",
+ "sidebar_highlight_text": "white"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/16223/Screen_Shot_2018-10-04_at_11.15.46_AM.png" style="display: block; height: 357px; margin: 0px auto; width: 269px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>sidebar_highlight_text</code></td>
+ <td>
+ <p>The text color of highlighted rows in sidebars.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with that used in <code>sidebar_highlight</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+ "sidebar_highlight": "pink",
+ "sidebar_highlight_text": "red",
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/16224/Screen_Shot_2018-10-04_at_11.22.41_AM.png" style="display: block; height: 363px; margin: auto; width: 262px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>sidebar_text</code></td>
+ <td>
+ <p>The text color of sidebars.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with that used in <code>sidebar</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "sidebar": "red",
+     "sidebar_highlight": "white",
+     "sidebar_highlight_text": "green",
+ "sidebar_text": "white"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/16176/sidebar_colors.png" style="display: block; margin: 0 auto; width: 250px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>tab_background_separator</code></td>
+ <td>
+ <p>The color of the vertical separator of the background tabs.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "tab_background_separator": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="A closeup of browser tabs to highlight the separator." src="https://mdn.mozillademos.org/files/16048/theme-tab-background-separator.png" style="height: 356px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>tab_background_text</code></td>
+ <td>
+ <p>The color of the text displayed in the inactive page tabs. If <code>tab_text</code> or <code>bookmark_text</code> isn't specified, applies to the active tab text.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with those used in <code>tab_selected</code> or <code>frame</code> and  <code>frame_inactive</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "toolbar": "white",
+    "tab_background_text": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15885/theme-textcolor.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>tab_line</code></td>
+ <td>
+ <p>The color of the selected tab line.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "tab_line": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15881/theme-tab_line.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>tab_loading</code></td>
+ <td>
+ <p>The color of the tab loading indicator and the tab loading burst.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "tab_loading": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15882/theme-tab_loading.gif" style="height: 186px; width: 618px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>tab_selected</code></td>
+ <td>
+ <p>The background color of the selected tab. When not in use selected tab color is set by <code>frame</code> and the <code>frame_inactive</code>.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "images": {
+  "theme_frame": "weta.png"
+},
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "tab_selected": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15883/theme-tab_selected.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>tab_text</code></td>
+ <td>
+ <p>From Firefox 59, it represents the text color for the selected tab. If <code>tab_line</code> isn't specified, it also defines the color of the selected tab line.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with those used in <code>tab_selected</code> or <code>frame</code> and  <code>frame_inactive</code>.</p>
+ </div>
+
+ <p>From Firefox 55 to 58, it is incorrectly implemented as alias for <code>"textcolor"</code></p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "images": {
+  "theme_frame": "weta.png"
+},
+  "colors": {
+     "frame": "black",
+     "tab_background_text": "white",
+     "tab_selected": "white",
+     "tab_text": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15884/theme-tab_text.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>textcolor {{Deprecated_Inline}}</code></td>
+ <td>
+ <div class="blockIndicator warning">
+ <p><code>textcolor</code> has been removed in Firefox 70. You will begin to get warnings in Firefox 65 and later if you load a theme that uses this property. Use <code>tab_background_text</code> instead.</p>
+ </div>
+
+ <p>The color of the text displayed in the header area.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "toolbar": "white",
+    "textcolor": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15885/theme-textcolor.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar</code></td>
+ <td>
+ <p>The background color for the navigation bar, the bookmarks bar, and the selected tab.</p>
+
+ <p>This also sets the background color of the "Find" bar.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "toolbar": "red",
+    "tab_background_text": "white"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15966/toolbar.png" style="height: 335px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_bottom_separator</code></td>
+ <td>
+ <p>The color of the line separating the bottom of the toolbar from the region below.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "tab_background_text": "white",
+    "toolbar_bottom_separator": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15887/theme-toolbar_bottom_separator.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_field</code></td>
+ <td>
+ <p>The background color for fields in the toolbar, such as the URL bar.</p>
+
+ <p>This also sets the background color of the <strong>Find in page</strong> field.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "tab_background_text": "white",
+    "toolbar_field": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15967/toolbar-field.png" style="height: 335px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_field_border</code></td>
+ <td>
+ <p>The border color for fields in the toolbar.</p>
+
+ <p>This also sets the border color of the <strong>Find in page</strong> field.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "toolbar": "black",
+    "tab_background_text": "white",
+    "toolbar_field": "black",
+    "toolbar_field_text": "white",
+    "toolbar_field_border": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15968/toolbar-field-border.png" style="height: 335px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_field_border_focus</code></td>
+ <td>
+ <p>The focused border color for fields in the toolbar.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "toolbar": "black",
+    "tab_background_text": "white",
+    "toolbar_field": "black",
+    "toolbar_field_text": "white",
+    "toolbar_field_border_focus": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15890/theme-toolbar_field_border_focus.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_field_focus</code></td>
+ <td>
+ <p>The focused background color for fields in the toolbar, such as the URL bar.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "toolbar": "black",
+    "tab_background_text": "white",
+    "toolbar_field": "black",
+    "toolbar_field_text": "white",
+    "toolbar_field_focus": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15891/theme-toolbar_field_focus.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_field_highlight</code></td>
+ <td>The background color used to indicate the current selection of text in the URL bar (and the search bar, if it's configured to be separate).
+ <details open><summary>See example</summary>
+ <pre class="brush: json notranslate">
+"theme": {
+ "colors": {
+ "toolbar_field": "rgba(255, 255, 255, 0.91)",
+ "toolbar_field_text": "rgb(0, 100, 0)",
+ "toolbar_field_highlight": "rgb(180, 240, 180, 0.9)",
+ "toolbar_field_highlight_text": "rgb(0, 80, 0)"
+ }
+}</pre>
+ </details>
+
+ <p><img alt="Example showing customized text and highlight colors in the URL bar" src="https://mdn.mozillademos.org/files/16632/toolbar_field_highlight.png" style="height: 289px; width: 738px;"></p>
+
+ <p>Here, the <code>toolbar_field_highlight</code> field specifies that the highlight color is a light green, while the text is set to a dark-to-medium green using <code>toolbar_field_highlight_text</code>.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_field_highlight_text</code></td>
+ <td>
+ <p>The color used to draw text that's currently selected in the URL bar (and the search bar, if it's configured to be separate box).</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with those used in <code>toolbar_field_highlight</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+ "colors": {
+ "toolbar_field": "rgba(255, 255, 255, 0.91)",
+ "toolbar_field_text": "rgb(0, 100, 0)",
+ "toolbar_field_highlight": "rgb(180, 240, 180, 0.9)",
+ "toolbar_field_highlight_text": "rgb(0, 80, 0)"
+ }
+}</pre>
+ </details>
+
+ <p><img alt="Example showing customized text and highlight colors in the URL bar" src="https://mdn.mozillademos.org/files/16632/toolbar_field_highlight.png" style="height: 289px; width: 738px;"></p>
+
+ <p>Here, the <code>toolbar_field_highlight_text</code> field is used to set the text color to a dark medium-dark green, while the highlight color is  a light green.</p>
+ </td>
+ </tr>
+ <tr>
+ </tr>
+ <tr>
+ <td><code>toolbar_field_separator</code></td>
+ <td>
+ <p>The color of separators inside the URL bar. In Firefox 58 this was implemented as <code>toolbar_vertical_separator</code>.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "toolbar": "black",
+    "tab_background_text": "white",
+    "toolbar_field_separator": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15895/theme-toolbar_field_separator.png" style="height: 302px; width: 738px;"></p>
+
+ <p>In this screenshot, <code>"toolbar_vertical_separator"</code> is the white vertical line in the URL bar dividing the Reader Mode icon from the other icons.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_field_text</code></td>
+ <td>
+ <p>The color of text in fields in the toolbar, such as the URL bar. This also sets the color of text in the <strong>Find in page</strong> field.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with those used in <code>toolbar_field</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "toolbar": "black",
+    "tab_background_text": "white",
+    "toolbar_field": "black",
+    "toolbar_field_text": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15969/toolbar-field-text.png" style="height: 335px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_field_text_focus</code></td>
+ <td>
+ <p>The color of text in focused fields in the toolbar, such as the URL bar.</p>
+
+ <div class="blockIndicator note">
+ <p>Ensure the color used contrasts well with those used in <code>toolbar_field_focus</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "toolbar": "black",
+    "tab_background_text": "white",
+    "toolbar_field": "black",
+    "toolbar_field_text": "white",
+    "toolbar_field_text_focus": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15893/theme-toolbar_field_text_focus.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_text </code></td>
+ <td>
+ <p>The color of toolbar text. This also sets the color of  text in the "Find" bar.</p>
+
+ <div class="blockIndicator note">
+ <p>For compatibility with Chrome, use the alias <code>bookmark_text</code>.</p>
+ </div>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "tab_background_text": "white",
+    "toolbar": "black",
+    "toolbar_text": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15970/toolbar-text.png" style="height: 335px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_top_separator</code></td>
+ <td>
+ <p>The color of the line separating the top of the toolbar from the region above.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "tab_background_text": "white",
+    "toolbar": "black",
+    "toolbar_top_separator": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15897/theme-toolbar_top_separator.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>toolbar_vertical_separator</code></td>
+ <td>
+ <p>The color of the separator next to the application menu icon. In Firefox 58, it corresponds to the color of separators inside the URL bar.</p>
+
+ <details open><summary>See example</summary>
+
+ <pre class="brush: json notranslate">
+"theme": {
+  "colors": {
+    "frame": "black",
+    "tab_background_text": "white",
+    "toolbar": "black",
+    "toolbar_vertical_separator": "red"
+  }
+}</pre>
+ </details>
+
+ <p><img alt="" src="https://mdn.mozillademos.org/files/15898/theme-toolbar_vertical_separator.png" style="height: 302px; width: 738px;"></p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h4 id="Aliases">Aliases</h4>
+
+<p>Additionally, this key accepts various properties that are aliases for one of the properties above. These are provided for compatibility with Chrome. If an alias is given, and the non-alias version is also given, then the value will be taken from the non-alias version.</p>
+
+<div class="blockIndicator warning">
+<p>Beginning Firefox 70, the following properties are removed: <code>accentcolor</code> and <code>textcolor</code>. Use <code>frame</code> and <code>tab_background_text</code> instead. Using these values in themes loaded into Firefox 65 or later will raise warnings.</p>
+</div>
+
+<table class="fullwidth-table standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Name</th>
+ <th scope="col">Alias for</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>bookmark_text</code></td>
+ <td><code>toolbar_text</code></td>
+ </tr>
+ <tr>
+ <td><code>frame</code></td>
+ <td><code>accentcolor</code> <code>{{Deprecated_Inline}}</code></td>
+ </tr>
+ <tr>
+ <td><code>frame_inactive</code></td>
+ <td><code>accentcolor</code> <code>{{Deprecated_Inline}}</code></td>
+ </tr>
+ <tr>
+ <td><code>tab_background_text</code></td>
+ <td><code>textcolor</code> <code>{{Deprecated_Inline}}</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="properties">properties</h3>
+
+<table class="fullwidth-table standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Name</th>
+ <th scope="col">Type</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>additional_backgrounds_alignment</code></td>
+ <td>
+ <p><code>Array</code> of <code>String</code></p>
+ </td>
+ <td>
+ <p>Optional.</p>
+
+ <p>An array of enumeration values defining the alignment of the corresponding <code>"additional_backgrounds":</code> array item.<br>
+ The alignment options include:</p>
+
+ <ul>
+ <li><code>"bottom"</code></li>
+ <li><code>"center"</code></li>
+ <li><code>"left"</code></li>
+ <li><code>"right"</code></li>
+ <li><code>"top"</code></li>
+ <li><code>"center bottom"</code></li>
+ <li><code>"center center"</code></li>
+ <li><code>"center top"</code></li>
+ <li><code>"left bottom"</code></li>
+ <li><code>"left center"</code></li>
+ <li><code>"left top"</code></li>
+ <li><code>"right bottom"</code></li>
+ <li><code>"right center"</code></li>
+ <li><code>"right top"</code>.</li>
+ </ul>
+
+ <p>If not specified, defaults to <code>"right top"</code>.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>additional_backgrounds_tiling</code></td>
+ <td>
+ <p><code>Array</code> of <code>String</code></p>
+ </td>
+ <td>
+ <p>Optional.</p>
+
+ <p>An array of enumeration values defining how the corresponding <code>"additional_backgrounds":</code> array item repeats. Options include:</p>
+
+ <ul>
+ <li><code>"no-repeat"</code></li>
+ <li><code>"repeat"</code></li>
+ <li><code>"repeat-x"</code></li>
+ <li><code>"repeat-y"</code></li>
+ </ul>
+
+ <p>If not specified, defaults to <code>"no-repeat"</code>.</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Examples">Examples</h2>
+
+<p dir="ltr" id="docs-internal-guid-f85f22a2-6854-24d7-769b-8a47c376e2f2">A basic theme must define an image to add to the header, the accent color to use in the header, and the color of text used in the header:</p>
+
+<pre class="brush: json notranslate" dir="ltr"> "theme": {
+ "images": {
+ "theme_frame": "images/sun.jpg"
+ },
+ "colors": {
+ "frame": "#CF723F",
+ "tab_background_text": "#000"
+ }
+ }</pre>
+
+<p dir="ltr">Multiple images can be used to fill the header. Before Firefox version 60, use a blank or transparent header image to gain control over the placement of each additional image:</p>
+
+<pre class="brush: json notranslate" dir="ltr"> "theme": {
+ "images": {
+ "additional_backgrounds": [ "images/left.png" , "images/middle.png", "images/right.png"]
+ },
+ "properties": {
+ "additional_backgrounds_alignment": [ "left top" , "top", "right top"]
+ },
+ "colors": {
+ "frame": "blue",
+ "tab_background_text": "#ffffff"
+ }
+ }</pre>
+
+<p dir="ltr">You can also fill the header with a repeated image, or images, in this case a single image anchored in the middle top of the header and repeated across the rest of the header:</p>
+
+<pre class="brush: json notranslate" dir="ltr"> "theme": {
+ "images": {
+ "additional_backgrounds": [ "images/logo.png"]
+ },
+ "properties": {
+ "additional_backgrounds_alignment": [ "top" ],
+ "additional_backgrounds_tiling": [ "repeat" ]
+ },
+ "colors": {
+ "frame": "green",
+ "tab_background_text": "#000"
+ }
+ }</pre>
+
+<p><a id="example-screenshot" name="example-screenshot">The following example uses most of the different values for <code>theme.colors</code>:</a></p>
+
+<pre class="brush: json notranslate">  "theme": {
+    "images": {
+      "theme_frame": "weta.png"
+    },
+
+    "colors": {
+       "frame": "darkgreen",
+       "tab_background_text": "white",
+       "toolbar": "blue",
+       "bookmark_text": "cyan",
+       "toolbar_field": "orange",
+ "toolbar_field_border": "white",
+       "toolbar_field_text": "green",
+       "toolbar_top_separator": "red",
+       "toolbar_bottom_separator": "white",
+       "toolbar_vertical_separator": "white"
+    }
+  }</pre>
+
+<p>It will give you a browser that looks like this:</p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/15789/theme.png" style="display: block; height: 652px; margin-left: auto; margin-right: auto; width: 1446px;"></p>
+
+<p>In this screenshot, <code>"toolbar_vertical_separator"</code> is the white vertical line in the URL bar dividing the Reader Mode icon from the other icons.</p>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("webextensions.manifest.theme")}}</p>
+
+<h3 id="Colors">Colors</h3>
+
+<p>{{Compat("webextensions.manifest.theme.colors", 10)}}</p>
+
+<h3 id="Images">Images</h3>
+
+<p>{{Compat("webextensions.manifest.theme.images", 10)}}</p>
+
+<h3 id="Properties">Properties</h3>
+
+<p>{{Compat("webextensions.manifest.theme.properties", 10)}}</p>
+
+<h3 id="Chrome_compatibility">Chrome compatibility</h3>
+
+<p>In Chrome:</p>
+
+<ul>
+ <li><code>colors/toolbar_text</code> is not used, use <code>colors/bookmark_text</code> instead.</li>
+ <li><code>images/theme_frame</code> anchors the image to the top left of the header and if the image doesn’t fill the header area tile the image.</li>
+ <li>all colors must be specified as an array of RGB values, like this:
+ <pre class="brush: json notranslate">"theme": {
+  "colors": {
+     "frame": [255, 0, 0],
+     "tab_background_text": [0, 255, 0],
+     "bookmark_text": [0, 0, 255]
+  }
+}</pre>
+
+ <p>From Firefox 59 onward, both the array form and the CSS color form are accepted for all properties. Before that, <code>colors/frame</code> and <code>colors/tab_background_text</code> required the array form, while other properties required the CSS color form.</p>
+ </li>
+</ul>
diff --git a/files/de/mozilla/add-ons/webextensions/match_patterns/index.html b/files/de/mozilla/add-ons/webextensions/match_patterns/index.html
new file mode 100644
index 0000000000..6c4694c922
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/match_patterns/index.html
@@ -0,0 +1,430 @@
+---
+title: Match patterns in extension manifests
+slug: Mozilla/Add-ons/WebExtensions/Match_patterns
+translation_of: Mozilla/Add-ons/WebExtensions/Match_patterns
+---
+<div>{{AddonSidebar}}</div>
+
+<p>Match patterns are a way to specify groups of URLs: a match pattern matches a specific set of URLs. They are used in WebExtensions APIs in a few places, most notably to specify which documents to load <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts">content scripts</a> into, and to specify which URLs to add <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest">webRequest</a></code> listeners to.</p>
+
+<p>APIs that use match patterns usually accept a list of match patterns, and will perform the appropriate action if the URL matches any of the patterns. See, for example, the <code><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts">content_scripts</a></code> key in manifest.json.</p>
+
+<h2 id="Match_pattern_structure">Match pattern structure</h2>
+
+<div class="note">
+<p><strong>Note:</strong> Some browsers don’t support certain schemes.<br>
+ Check the <a href="#Browser_compatibility">Browser compatibility table</a> for details.</p>
+</div>
+
+<p>All match patterns are specified as strings. Apart from the special <code><a href="/en-US/Add-ons/WebExtensions/Match_patterns#%3Call_urls%3E">&lt;all_urls&gt;</a></code> pattern, match patterns consist of three parts: <em>scheme</em>, <em>host</em>, and <em>path</em>. The scheme and host are separated by <code>://</code>.</p>
+
+<pre>&lt;scheme&gt;://&lt;host&gt;&lt;path&gt;</pre>
+
+<h3 id="scheme">scheme</h3>
+
+<p>The <em>scheme</em> component may take one of two forms:</p>
+
+<table class="fullwidth-table standard-table">
+ <thead>
+ <tr>
+ <th scope="col" style="width: 50%;">Form</th>
+ <th scope="col">Matches</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>*</code></td>
+ <td>Only "http" and "https" and in some browsers also <a href="/en-US/docs/Web/API/WebSockets_API">"ws" and "wss"</a>.</td>
+ </tr>
+ <tr>
+ <td>One of <code>http</code>, <code>https</code>, <code>ws</code>, <code>wss</code>, <code>ftp</code>, <code>ftps</code>, <code>data</code> or <code>file</code>.</td>
+ <td>Only the given scheme.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="host">host</h3>
+
+<p>The <em>host</em> component may take one of three forms:</p>
+
+<table class="fullwidth-table standard-table">
+ <thead>
+ <tr>
+ <th scope="col" style="width: 50%;">Form</th>
+ <th scope="col">Matches</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>*</code></td>
+ <td>Any host.</td>
+ </tr>
+ <tr>
+ <td><code>*.</code> followed by part of the hostname.</td>
+ <td>The given host and any of its subdomains.</td>
+ </tr>
+ <tr>
+ <td>A complete hostname, without wildcards.</td>
+ <td>Only the given host.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p><em>host</em> must not include a port number.</p>
+
+<p><em>host</em> is optional only if the <em>scheme</em> is "file".</p>
+
+<p>Note that the wildcard may only appear at the start.</p>
+
+<h3 id="path">path</h3>
+
+<p>The <em>path</em> component must begin with a <code>/</code>.</p>
+
+<p>After that, it may subsequently contain any combination of the <code>*</code> wildcard and any of the characters that are allowed in URL paths or query strings. Unlike <em>host</em>, the <em>path</em> component may contain the <code>*</code> wildcard in the middle or at the end, and the <code>*</code> wildcard may appear more than once.</p>
+
+<p>The value for the <em>path</em> matches against the string which is the URL path plus the <a href="https://en.wikipedia.org/wiki/Query_string">URL query string</a>. This includes the <code>?</code> between the two, if the query string is present in the URL. For example, if you want to match URLs on any domain where the URL path ends with <code>foo.bar</code>, then you need to use an array of Match Patterns like <code>['*://*/*foo.bar', '*://*/*foo.bar?*']</code>. The <code>?*</code> is needed, rather than just <code>bar*</code>, in order to anchor the ending <code>*</code> as applying to the URL query string and not some portion of the URL path.</p>
+
+<p>Neither the <a href="https://en.wikipedia.org/wiki/Fragment_identifier">URL fragment identifier</a>, nor the <code>#</code> which precedes it, are considered as part of the <em>path</em>.</p>
+
+<div class="blockIndicator note">
+<p><strong>Note</strong>: The path pattern string should not include a port number. Adding a port, as in: <em>"http://localhost:1234/*" </em>causes the match pattern to be ignored. However, "<em>http://localhost:1234</em>" will match with "<em>http://localhost/*</em>"</p>
+</div>
+
+<h3 id="&lt;all_urls>">&lt;all_urls&gt;</h3>
+
+<p>The special value <code>&lt;all_urls&gt;</code> matches all URLs under any of the supported schemes: that is "http", "https", "ws", "wss", "ftp", "data", and "file".</p>
+
+<h2 id="Examples">Examples</h2>
+
+<table class="fullwidth-table standard-table">
+ <thead>
+ <tr>
+ <th scope="col" style="width: 33%;">Pattern</th>
+ <th scope="col" style="width: 33%;">Example matches</th>
+ <th scope="col" style="width: 33%;">Example non-matches</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <p><code>&lt;all_urls&gt;</code></p>
+
+ <p>Match all URLs.</p>
+ </td>
+ <td>
+ <p><code>http://example.org/</code></p>
+
+ <p><code>https://a.org/some/path/</code></p>
+
+ <p><code>ws://sockets.somewhere.org/</code></p>
+
+ <p><code>wss://ws.example.com/stuff/</code></p>
+
+ <p><code>ftp://files.somewhere.org/</code></p>
+
+ <p><code>ftps://files.somewhere.org/</code></p>
+ </td>
+ <td>
+ <p><code>resource://a/b/c/</code><br>
+ (unsupported scheme)</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>*://*/*</code></p>
+
+ <p>Match all HTTP, HTTPS and WebSocket URLs.</p>
+ </td>
+ <td>
+ <p><code>http://example.org/</code></p>
+
+ <p><code>https://a.org/some/path/</code></p>
+
+ <p><code>ws://sockets.somewhere.org/</code></p>
+
+ <p><code>wss://ws.example.com/stuff/</code></p>
+ </td>
+ <td>
+ <p><code>ftp://ftp.example.org/</code><br>
+ (unmatched scheme)</p>
+
+ <p><code>ftps://ftp.example.org/</code><br>
+ (unmatched scheme)</p>
+
+ <p><code>file:///a/</code><br>
+ (unmatched scheme)</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>*://*.mozilla.org/*</code></p>
+
+ <p>Match all HTTP, HTTPS and WebSocket URLs that are hosted at "mozilla.org" or one of its subdomains.</p>
+ </td>
+ <td>
+ <p><code>http://mozilla.org/</code></p>
+
+ <p><code>https://mozilla.org/</code></p>
+
+ <p><code>http://a.mozilla.org/</code></p>
+
+ <p><code>http://a.b.mozilla.org/</code></p>
+
+ <p><code>https://b.mozilla.org/path/</code></p>
+
+ <p><code>ws://ws.mozilla.org/</code></p>
+
+ <p><code>wss://secure.mozilla.org/something</code></p>
+ </td>
+ <td>
+ <p><code>ftp://mozilla.org/</code><br>
+ (unmatched scheme)</p>
+
+ <p><code>http://mozilla.com/</code><br>
+ (unmatched host)</p>
+
+ <p><code>http://firefox.org/</code><br>
+ (unmatched host)</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>*://mozilla.org/</code></p>
+
+ <p>Match all HTTP, HTTPS and WebSocket URLs that are hosted at exactly "mozilla.org/".</p>
+ </td>
+ <td>
+ <p><code>http://mozilla.org/</code></p>
+
+ <p><code>https://mozilla.org/</code></p>
+
+ <p><code>ws://mozilla.org/</code></p>
+
+ <p><code>wss://mozilla.org/</code></p>
+ </td>
+ <td>
+ <p><code>ftp://mozilla.org/</code><br>
+ (unmatched scheme)</p>
+
+ <p><code>http://a.mozilla.org/</code><br>
+ (unmatched host)</p>
+
+ <p><code>http://mozilla.org/a</code><br>
+ (unmatched path)</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>ftp://mozilla.org/</code></p>
+
+ <p>Match only "ftp://mozilla.org/".</p>
+ </td>
+ <td><code>ftp://mozilla.org</code></td>
+ <td>
+ <p><code>http://mozilla.org/</code><br>
+ (unmatched scheme)</p>
+
+ <p><code>ftp://sub.mozilla.org/</code><br>
+ (unmatched host)</p>
+
+ <p><code>ftp://mozilla.org/path</code><br>
+ (unmatched path)</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>https://*/path</code></p>
+
+ <p>Match HTTPS URLs on any host, whose path is "path".</p>
+ </td>
+ <td>
+ <p><code>https://mozilla.org/path</code></p>
+
+ <p><code>https://a.mozilla.org/path</code></p>
+
+ <p><code>https://something.com/path</code></p>
+ </td>
+ <td>
+ <p><code>http://mozilla.org/path</code><br>
+ (unmatched scheme)</p>
+
+ <p><code>https://mozilla.org/path/</code><br>
+ (unmatched path)</p>
+
+ <p><code>https://mozilla.org/a</code><br>
+ (unmatched path)</p>
+
+ <p><code>https://mozilla.org/</code><br>
+ (unmatched path)</p>
+
+ <p><code>https://mozilla.org/path?foo=1</code><br>
+ (unmatched path due to URL query string)</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>https://*/path/</code></p>
+
+ <p>Match HTTPS URLs on any host, whose path is "path/" and which has no URL query string.</p>
+ </td>
+ <td>
+ <p><code>https://mozilla.org/path/</code></p>
+
+ <p><code>https://a.mozilla.org/path/</code></p>
+
+ <p><code>https://something.com/path</code>/</p>
+ </td>
+ <td>
+ <p><code>http://mozilla.org/path/</code><br>
+ (unmatched scheme)</p>
+
+ <p><code>https://mozilla.org/path</code><br>
+ (unmatched path)</p>
+
+ <p><code>https://mozilla.org/a</code><br>
+ (unmatched path)</p>
+
+ <p><code>https://mozilla.org/</code><br>
+ (unmatched path)</p>
+
+ <p><code>https://mozilla.org/path/</code><code>?foo=1</code><br>
+ (unmatched path due to URL query string)</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>https://mozilla.org/*</code></p>
+
+ <p>Match HTTPS URLs only at "mozilla.org", with any URL path and URL query string.</p>
+ </td>
+ <td>
+ <p><code>https://mozilla.org/</code></p>
+
+ <p><code>https://mozilla.org/path</code></p>
+
+ <p><code>https://mozilla.org/another</code></p>
+
+ <p><code>https://mozilla.org/path/to/doc</code></p>
+
+ <p><code>https://mozilla.org/path/to/doc?foo=1</code></p>
+ </td>
+ <td>
+ <p><code>http://mozilla.org/path</code><br>
+ (unmatched scheme)</p>
+
+ <p><code>https://mozilla.com/path</code><br>
+ (unmatched host)</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>https://mozilla.org/a/b/c/</code></p>
+
+ <p>Match only this URL, or this URL with any URL fragment.</p>
+ </td>
+ <td>
+ <p><code>https://mozilla.org/a/b/c/</code></p>
+
+ <p><code>https://mozilla.org/a/b/c/#section1</code></p>
+ </td>
+ <td>Anything else.</td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>https://mozilla.org/*/b/*/</code></p>
+
+ <p>Match HTTPS URLs hosted on "mozilla.org", whose path contains a component "b" somewhere in the middle. Will match URLs with query strings, if the string ends in a <code>/</code>.</p>
+ </td>
+ <td>
+ <p><code>https://mozilla.org/a/b/c/</code></p>
+
+ <p><code>https://mozilla.org/d/b/f/</code></p>
+
+ <p><code>https://mozilla.org/a/b/c/d/</code></p>
+
+ <p><code>https://mozilla.org/a/b/c/d/#section1</code></p>
+
+ <p><code>https://mozilla.org/a/b/c/d/?foo=/</code></p>
+
+ <p><code>https://mozilla.org/a?foo=21314&amp;bar=/b/&amp;extra=c/</code></p>
+ </td>
+ <td>
+ <p><code>https://mozilla.org/b/*/</code><br>
+ (unmatched path)</p>
+
+ <p><code>https://mozilla.org/a/b/</code><br>
+ (unmatched path)</p>
+
+ <p><code>https://mozilla.org/a/b/c/d/?foo=bar</code><br>
+ (unmatched path due to URL query string)</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>file:///blah/*</code></p>
+
+ <p>Match any FILE URL whose path begins with "blah".</p>
+ </td>
+ <td>
+ <p><code>file:///blah/</code></p>
+
+ <p><code>file:///blah/bleh</code></p>
+ </td>
+ <td><code>file:///bleh/</code><br>
+ (unmatched path)</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Invalid_match_patterns">Invalid match patterns</h3>
+
+<table class="fullwidth-table standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Invalid pattern</th>
+ <th scope="col">Reason</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>resource://path/</code></td>
+ <td>Unsupported scheme.</td>
+ </tr>
+ <tr>
+ <td><code>https://mozilla.org</code></td>
+ <td>No path.</td>
+ </tr>
+ <tr>
+ <td><code>https://mozilla.*.org/</code></td>
+ <td>"*" in host must be at the start.</td>
+ </tr>
+ <tr>
+ <td><code>https://*zilla.org/</code></td>
+ <td>"*" in host must be the only character or be followed by ".".</td>
+ </tr>
+ <tr>
+ <td><code>http*://mozilla.org/</code></td>
+ <td>"*" in scheme must be the only character.</td>
+ </tr>
+ <tr>
+ <td><code>https://mozilla.org:80/</code></td>
+ <td>Host must not include a port number.</td>
+ </tr>
+ <tr>
+ <td><code>*://*</code></td>
+ <td>Empty path: this should be "<code>*://*/*</code>".</td>
+ </tr>
+ <tr>
+ <td><code>file://*</code></td>
+ <td>Empty path: this should be "<code>file:///*</code>".</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<h3 id="scheme_2">scheme</h3>
+
+
+
+<p>{{Compat("webextensions.match_patterns.scheme",10)}}</p>
diff --git a/files/de/mozilla/add-ons/webextensions/what_are_webextensions/index.html b/files/de/mozilla/add-ons/webextensions/what_are_webextensions/index.html
new file mode 100644
index 0000000000..85498e8b30
--- /dev/null
+++ b/files/de/mozilla/add-ons/webextensions/what_are_webextensions/index.html
@@ -0,0 +1,24 @@
+---
+title: Was sind WebExtensions?
+slug: Mozilla/Add-ons/WebExtensions/What_are_WebExtensions
+tags:
+ - WebExtensions
+translation_of: Mozilla/Add-ons/WebExtensions/What_are_WebExtensions
+---
+<div>{{AddonSidebar}}</div>
+
+<p>WebExtensions erweitern und modifizieren die Funktionen eines Web-Browsers. Sie werden unter Verwendung von Standard-Webtechnologien - JavaScript, HTML und CSS - sowie zusätzlichen speziell dafür vorgesehenen JavaScript APIs erstellt. Unter anderem können mit so einer Erweiterung neue Funktionen zum Browser hinzufügt, das Erscheinungsbild oder der Inhalt bestimmter Webseiten verändert werden.</p>
+
+<p>Erweiterungen für Firefox werden mit Hilfe von WebExtensions APIs erstellt, einem Cross-Browser-System zum Entwickeln von Browsererweiterungen. Zum größten Teil ist die API kompatibel mit der <a class="external external-icon" href="https://developer.chrome.com/extensions">extension API</a> für Google Chrome und Opera. Erweiterungen, die für diese Browser erstellt wurden, laufen in den meisten Fällen mit <a href="/de/docs/Mozilla/Add-ons/WebExtensions/Porting_a_Google_Chrome_extension">wenigen Änderungen</a> in Firefox oder Microsoft Edge. Die API ist ebenfalls vollständig mit <a href="/de/Firefox/Multiprocess_Firefox">Multiprozess-Firefox</a> kompatibel.</p>
+
+<p>Vor WebExtensions gab es drei unterschiedliche Möglichkeiten, Erweiterungen für Firefox zu erstellen: <a href="/de/Add-ons/überliegende_Erweiterungen">XUL/XPCOM overlays</a>, <a href="/de/Add-ons/Bootstrapped_extensions">bootstrapped extensions</a> und das <a href="/de/Add-ons/SDK">Add-on SDK</a>. Seit Ende November 2017 sind WebExtensions APIs die einzige Möglichkeit, Firefox-Erweiterungen zu entwickeln, die vorherigen Systeme gelten als veraltet.</p>
+
+<p>Wir sind stets bemüht, die API ständig zu erweitern, um den Anforderungen der Add-on-Entwickler gerecht zu werden. Sollten Sie Anregungen dazu haben, würden wir uns über Ihre Mitteilung auf der englischsprachigen <a class="external external-icon" href="https://mail.mozilla.org/listinfo/dev-addons">Mailingliste für Add-on-Entwickler</a> oder auf <a href="irc://irc.mozilla.org/webextensions">#webextensions</a> im <a class="external external-icon" href="https://wiki.mozilla.org/IRC">IRC</a> freuen.</p>
+
+<h2 id="Nächste_Schritte">Nächste Schritte?</h2>
+
+<ul>
+ <li><a href="/de/Add-ons/WebExtensions/Examples">WebExtensions Beispiele</a>.</li>
+ <li><a href="/de/Add-ons/WebExtensions/Anatomy_of_a_WebExtension">Aufbau einer WebExtension</a>.</li>
+ <li><a href="/de/Add-ons/WebExtensions/Your_first_WebExtension">Schritt-für-Schritt Entwicklung einer einfachen WebExtension</a>.</li>
+</ul>