{"id":70046,"date":"2024-05-14T15:42:23","date_gmt":"2024-05-14T14:42:23","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=70046&#038;preview=true&#038;preview_id=70046"},"modified":"2024-05-24T14:46:10","modified_gmt":"2024-05-24T13:46:10","slug":"chrome-erweiterung-erstellen","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/","title":{"rendered":"Wie du mit der Kinsta API und React eine Chrome-Erweiterung zur Verwaltung der Plugins deiner Website erstellst"},"content":{"rendered":"<p>Als Nutzer von <a href=\"https:\/\/kinsta.com\/de\/blog\/microsoft-edge-gegen-chrome\/\">Google Chrome<\/a> hast du wahrscheinlich schon einige Erweiterungen in diesem Browser verwendet. Hast du dich jemals gefragt, wie sie aufgebaut sind oder ob du selbst eine bauen k\u00f6nntest?<\/p>\n<p>In diesem Artikel erf\u00e4hrst du, wie du eine Chrome-Erweiterung erstellst, und zwar eine, die React und die Kinsta-API nutzt, um Plugins auf WordPress-Websites zu verwalten, die bei Kinsta gehostet werden.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Was ist eine Chrome-Erweiterung?<\/h2>\n<p>Eine Chrome-Erweiterung ist ein Programm, das im Chrome-Browser installiert wird und dessen Funktionen erweitert. Erweiterungen k\u00f6nnen von einfachen Symbolschaltfl\u00e4chen in der Symbolleiste bis hin zu vollst\u00e4ndig integrierten Funktionen reichen, die tief in dein Browsing-Erlebnis eingreifen.<\/p>\n<h2>Wie man eine Chrome-Erweiterung erstellt<\/h2>\n<p>Die Erstellung einer Chrome-Erweiterung ist \u00e4hnlich wie die Entwicklung einer <a href=\"https:\/\/kinsta.com\/de\/blog\/web-anwendungs-architektur\/\">Webanwendung<\/a>, erfordert aber eine JSON-formatierte Datei namens <strong>manifest.json<\/strong>. Diese Datei ist das R\u00fcckgrat der Erweiterung und legt die Einstellungen, Berechtigungen und Funktionen fest, die du integrieren m\u00f6chtest.<\/p>\n<p>Als Erstes erstellst du einen Ordner, in dem alle Dateien deiner Erweiterung gespeichert werden. Als N\u00e4chstes erstellst du eine <strong>manifest.json-Datei<\/strong> in diesem Ordner.<\/p>\n<p>Eine grundlegende <strong>manifest.json-Datei<\/strong> f\u00fcr eine Chrome-Erweiterung enth\u00e4lt wichtige Eigenschaften, die die Grundeinstellungen der Erweiterung festlegen. Im Folgenden findest du ein Beispiel f\u00fcr eine <strong>manifest.json-Datei<\/strong>, die die notwendigen Felder enth\u00e4lt, damit sie funktioniert:<\/p>\n<pre><code class=\"language-json\">{\n  \"manifest_version\": 3,\n  \"name\": \"My Chrome extension\",\n  \"version\": \"1.0\",\n  \"description\": \"Here is a description for my Chrome extension.\"\n}<\/code><\/pre>\n<p>Du kannst sie als entpackte Erweiterung in Chrome laden und testen. Navigiere in deinem Browser zu <code>chrome:\/\/extensions<\/code>, schalte den <strong>Entwicklermodus<\/strong> ein und klicke dann auf die Schaltfl\u00e4che <strong>Load Unpacked<\/strong>. Daraufhin \u00f6ffnet sich ein Dateibrowser, in dem du das Verzeichnis ausw\u00e4hlen kannst, das du f\u00fcr deine Erweiterung erstellt hast.<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2024\/04\/load-extension.png\" alt=\"Lade eine Chrome-Erweiterung, indem du im Entwicklermodus auf Load unpacked klickst\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Lade eine Chrome-Erweiterung, indem du im Entwicklermodus auf Load unpacked klickst<\/figcaption><\/figure>\n<p>Wenn du auf das Erweiterungssymbol klickst, passiert nichts, weil du noch keine Benutzeroberfl\u00e4che erstellt hast.<\/p>\n<h3>Erstelle eine Benutzeroberfl\u00e4che (Popup) f\u00fcr deine Chrome-Erweiterung<\/h3>\n<p>Wie bei jeder Webanwendung verwendet auch die Benutzeroberfl\u00e4che (UI) deiner Erweiterung <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-html\/\">HTML<\/a>, um den Inhalt zu strukturieren, <a href=\"https:\/\/kinsta.com\/de\/blog\/css-best-practices\/\">CSS<\/a>, um ihn zu gestalten, und <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-javascript\/\">JavaScript<\/a>, um Interaktivit\u00e4t hinzuzuf\u00fcgen.<\/p>\n<p>Lass uns eine einfache Benutzeroberfl\u00e4che mit all diesen Dateien erstellen. Beginne mit der Erstellung einer HTML-Datei (<strong>popup.html<\/strong>). Diese Datei legt die Struktur deiner UI-Elemente fest, z. B. Text, \u00dcberschriften, Bilder und Schaltfl\u00e4chen. F\u00fcge den folgenden Code ein:<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n    &lt;head&gt;\n        &lt;meta charset=\"UTF-8\" \/&gt;\n        &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;\n        &lt;title&gt;Hello World&lt;\/title&gt;\n        &lt;link rel=\"stylesheet\" href=\"popup.css\" \/&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        &lt;h1&gt;Hello World!&lt;\/h1&gt;\n        &lt;p&gt;My first Chrome Extension&lt;\/p&gt;\n        &lt;button&gt; id=\"sayHello\"&gt;Say Hello&lt;\/button&gt;\n        &lt;script&gt; src=\"popup.js\"&gt;&lt;\/script&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Der obige Code erstellt eine \u00dcberschrift, einen Absatz und eine Schaltfl\u00e4che. Die CSS- und JavaScript-Dateien sind ebenfalls verlinkt. F\u00fcge nun einige Stile in der Datei <strong>popup.css<\/strong> hinzu:<\/p>\n<pre><code class=\"language-css\">* {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n}\n\nbody {\n    font-family: Arial, sans-serif;\n    background-color: aliceblue;\n    padding: 20px;\n}<\/code><\/pre>\n<p>Als N\u00e4chstes f\u00fcgst du in der Datei <strong>popup.js<\/strong> einen Event-Listener f\u00fcr die Schaltfl\u00e4che hinzu, damit beim Anklicken der Schaltfl\u00e4che eine Warnmeldung angezeigt wird:<\/p>\n<pre><code class=\"language-js\">const sayHelloBtn = document.getElementById('sayHello');\nsayHelloBtn.addEventListener('click', async () =&gt; {\n    let tab = await chrome.tabs.query({ active: true });\n    chrome.scripting.executeScript({\n        target: { tabId: tab[0].id },\n        function: () =&gt; alert('Hello from the extension!'),\n    });\n});<\/code><\/pre>\n<p>Dieser JavaScript-Code ruft die aktuell aktive Registerkarte ab und verwendet die <a href=\"https:\/\/developer.chrome.com\/docs\/extensions\/reference\/api\/scripting\" target=\"_blank\" rel=\"noopener noreferrer\">Chrome Scripting API<\/a>, um ein Skript auszuf\u00fchren, das eine Benachrichtigung mit einer Begr\u00fc\u00dfungsnachricht anzeigt, wenn die Schaltfl\u00e4che <strong>Hallo<\/strong>\u00a0angeklickt wird. So erh\u00e4lt deine Chrome-Erweiterung eine grundlegende Interaktivit\u00e4t.<\/p>\n<p>Mit diesen Schritten hast du eine einfache Popup-Benutzeroberfl\u00e4che f\u00fcr deine Chrome-Erweiterung eingerichtet, die grundlegenden Text, Design und Funktionen enth\u00e4lt.<\/p>\n<p>Zum Schluss musst du die Popup-Datei in der <strong>manifest.json-Datei<\/strong> aktivieren, indem du einige Berechtigungen hinzuf\u00fcgst:<\/p>\n<pre><code class=\"language-json\">{\n    . . . ,\n    \"action\": {\n        \"default_popup\": \"popup.html\"\n    },\n    \"permissions\": [\n        \"scripting\",\n        \"tabs\"\n    ],\n    \"host_permissions\": [\n        \"http:\/\/*\/*\",\n        \"https:\/\/*\/*\"\n    ]\n}<\/code><\/pre>\n<p>In der obigen Konfiguration legt der Schl\u00fcssel <code>default_popup<\/code> fest, dass <strong>popup.html<\/strong> die Standard-Oberfl\u00e4che ist, wenn der Nutzer mit der Erweiterung interagiert. Das Array <code>permissions<\/code> enth\u00e4lt <code>scripting<\/code> und <code>tabs<\/code>, die wichtig sind, damit die Erweiterung mit den Tabs interagieren und die Skripting-Funktionen des Browsers nutzen kann.<\/p>\n<p>Das Array <code>host_permissions<\/code> gibt an, mit welchen Seiten deine Erweiterung interagieren kann. Die Muster <code>http:\/\/*\/*<\/code> und <code>https:\/\/*\/*<\/code> zeigen an, dass deine Erweiterung mit allen Websites interagieren kann, die \u00fcber HTTP- und HTTPS-Protokolle aufgerufen werden.<\/p>\n<p>Mit diesen Einstellungen in deiner <strong>manifest.json-Datei<\/strong> ist deine Chrome-Erweiterung richtig konfiguriert, um ein Popup anzuzeigen und Skripte auszuf\u00fchren.<\/p>\n<h3>Lade deine Chrome-Erweiterung neu<\/h3>\n<p>Nachdem diese \u00c4nderungen in deinem lokalen Ordner vorgenommen wurden, musst du den entpackten Ordner aktualisieren, der in Chrome geladen wurde. \u00d6ffne dazu die Seite mit den Chrome-Erweiterungen, suche deine Erweiterung und klicke auf das Symbol zum Neuladen.<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2024\/04\/reload-extension.png\" alt=\"Klicke auf das Aktualisierungssymbol, um die Erweiterung neu zu laden\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Klicke auf das Aktualisierungssymbol, um die Erweiterung neu zu laden<\/figcaption><\/figure>\n<p>Du kannst dann auf das Erweiterungssymbol klicken, woraufhin ein Popup erscheint. Wenn du auf die Schaltfl\u00e4che <strong>Hallo sagen<\/strong> klickst, erscheint eine Meldung.<\/p>\n<p>Du wei\u00dft jetzt, wie du eine Chrome-Erweiterung erstellen kannst. Es gibt noch mehr, was du tun kannst. Du kannst die Benutzeroberfl\u00e4che deiner Website ver\u00e4ndern, API-Anfragen stellen, Daten von URLs abrufen, um bestimmte Aktionen durchzuf\u00fchren und vieles mehr.<\/p>\n<h2>So erstellst du eine Chrome-Erweiterung mit React<\/h2>\n<p>Wie wir bereits erw\u00e4hnt haben, ist die Erstellung einer Chrome-Erweiterung \u00e4hnlich wie die Erstellung einer Webanwendung. Du kannst beliebte Web-Frameworks wie <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-react-js\/\">React<\/a> verwenden.<\/p>\n<p>Bei React wird die Datei <strong>manifest.json<\/strong> im Ordner <strong>public<\/strong> erstellt. Dieser Ordner wird f\u00fcr statische Assets verwendet, die nicht von <a href=\"https:\/\/kinsta.com\/de\/blog\/rollup-vs-webpack-vs-parcel\/\">Webpack<\/a> (oder \u00e4hnlichen Bundlern, die React unter der Haube in Tools wie <a href=\"https:\/\/create-react-app.dev\/\" target=\"_blank\" rel=\"noopener noreferrer\">Create React App<\/a> verwenden kann) verarbeitet werden sollen.<\/p>\n<p>Wenn du deine React-Anwendung baust, kopiert der Build-Prozess alle Inhalte des <strong>\u00f6ffentlichen<\/strong> Ordners in den <strong>dist-Ordner<\/strong>. Hier erf\u00e4hrst du, wie du eine Chrome-Erweiterung mit React erstellst:<\/p>\n<ol start=\"1\">\n<li>Erstelle eine neue React-Anwendung. Du kannst die lokale Entwicklungsumgebung Vite verwenden, indem du den folgenden Befehl in deinem Terminal ausf\u00fchrst:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">npm create vite@latest<\/code><\/pre>\n<p>Als N\u00e4chstes gibst du deinem Projekt einen Namen und w\u00e4hlst React als Framework aus. Sobald das erledigt ist, navigierst du in den Projektordner und installierst die Abh\u00e4ngigkeiten:<\/p>\n<pre><code class=\"language-bash\">cd &lt;project-name&gt;\nnpm install<\/code><\/pre>\n<ol start=\"2\">\n<li>Erstelle im <strong>\u00f6ffentlichen<\/strong> Ordner deines React-Projekts eine <strong>manifest.json-Datei<\/strong>. F\u00fcge die folgenden Konfigurationen hinzu:<\/li>\n<\/ol>\n<pre><code class=\"language-json\">{\n    \"manifest_version\": 3,\n    \"name\": \"React Chrome extension\",\n    \"description\": \"Chrome extension built with React\",\n    \"version\": \"0.1.0\",\n    \"action\": {\n        \"default_popup\": \"index.html\"\n    },\n    \"permissions\": [\n        \"tabs\"\n    ],\n    \"host_permissions\": [\n        \"http:\/\/*\/*\",\n        \"https:\/\/*\/*\"\n    ]\n}<\/code><\/pre>\n<p>Die Konfiguration f\u00fcr eine Chrome-Erweiterung enth\u00e4lt ein <code>action<\/code> Objekt, das <strong>index.html<\/strong> als Standard-Popup festlegt, wenn das Erweiterungssymbol angeklickt wird. Dies ist die statische HTML-Datei, die erzeugt wird, wenn du deine React-Anwendung erstellst.<\/p>\n<ol start=\"3\">\n<li>Entwickle die React-Anwendung. Du kannst API-Anfragen stellen, sie nach Belieben gestalten, React Hooks verwenden und vieles mehr.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Wenn du mit der Erstellung der Benutzeroberfl\u00e4che der Erweiterung fertig bist, f\u00fchre den Build-Befehl in React aus (<code>npm run build<\/code>). Alle Assets, einschlie\u00dflich der <strong>manifest.json-Datei<\/strong>, der mit React erstellten <strong>index.html<\/strong> und anderen, werden in den <strong>dist-<\/strong> oder <strong>build-Ordner<\/strong> verschoben.<\/li>\n<li>Zum Schluss l\u00e4dst du deine Erweiterung in Chrome. Navigiere zu <code>chrome:\/\/extensions\/<\/code> und lade deine Erweiterung erneut.<\/li>\n<\/ol>\n<h2>Erstellen einer Chrome-Erweiterung zur Verwaltung der Plugins deiner Website mit der Kinsta-API<\/h2>\n<p>So sieht die Chrome-Erweiterung aus, die du erstellen wirst:<\/p>\n<figure style=\"width: 1001px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2024\/04\/kinsta-api-extension.gif\" alt=\"Eine mit React erstellte Chrome-Erweiterung, die mit der Kinsta-API interagiert\" width=\"1001\" height=\"471\"><figcaption class=\"wp-caption-text\">Eine mit React erstellte Chrome-Erweiterung, die mit der Kinsta-API interagiert<\/figcaption><\/figure>\n<p>Wenn du darauf klickst, zeigt die Erweiterung eine Liste der Websites mit veralteten Plugins in deinem <a href=\"https:\/\/my.kinsta.com\/?lang=de\" target=\"_blank\" rel=\"noopener noreferrer\">MyKinsta-Konto<\/a> an. Du kannst eine Liste der Plugins sehen und auf die Schaltfl\u00e4che <strong>In MyKinsta anzeigen<\/strong> klicken, um zur Seite <a href=\"https:\/\/kinsta.com\/de\/docs\/wordpress-hosting\/wordpress-plugins-themes\/\">Themes &#038; Plugins<\/a> der Seite zu navigieren, wo du jedes Plugin aktualisieren kannst.<\/p>\n<p>Sehen wir uns an, wie du die Chrome-Erweiterung erstellen kannst.<\/p>\n<h3>Die Kinsta-API verstehen<\/h3>\n<p>Die <a href=\"https:\/\/kinsta.com\/de\/docs\/kinsta-api\/\">Kinsta-API<\/a> ist ein leistungsstarkes Werkzeug, mit dem du programmatisch mit Kinsta-Diensten wie gehosteten WordPress-Seiten interagieren kannst. Sie kann dir helfen, verschiedene Aufgaben im Zusammenhang mit der WordPress-Verwaltung zu automatisieren, z. B. die <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-api\/\">Erstellung von Websites<\/a>, das <a href=\"https:\/\/kinsta.com\/de\/blog\/plane-wartungsaufgaben-kinsta-api\/\">Abrufen von Website-Informationen<\/a>, den <a href=\"https:\/\/kinsta.com\/de\/blog\/kinsta-api-schluessel\/#how-to-use-kinsta-api-to-build-a-status-checker\">Status einer Website<\/a>, das <a href=\"https:\/\/kinsta.com\/de\/blog\/server-protokolle-api\/\">Durchsuchen<\/a> und <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-backups-api\/\">Wiederherstellen von Backups<\/a> und vieles mehr.<\/p>\n<p>Um die Kinsta-API zu nutzen, musst du ein Konto mit mindestens einer WordPress-Website, <a href=\"https:\/\/sevalla.com\/application-hosting\/\">-Anwendung<\/a> oder <a href=\"https:\/\/sevalla.com\/database-hosting\/\">-Datenbank<\/a> in MyKinsta haben. Au\u00dferdem musst du einen API-Schl\u00fcssel erstellen, um dich zu authentifizieren und auf dein Konto zuzugreifen.<\/p>\n<p>So generierst du einen API-Schl\u00fcssel:<\/p>\n<ol start=\"1\">\n<li>Gehe zu deinem <a href=\"https:\/\/my.kinsta.com\/?lang=de\" target=\"_blank\" rel=\"noopener noreferrer\">MyKinsta-Dashboard<\/a>.<\/li>\n<li>Navigiere zur Seite mit den API-Schl\u00fcsseln (<strong>Dein Name<\/strong> &gt; <strong>Unternehmenseinstellungen <\/strong>&gt; <strong>API-Schl\u00fcssel<\/strong>).<\/li>\n<li>Klicke auf <strong>API-Schl\u00fcssel generieren<\/strong>.<\/li>\n<li>W\u00e4hle ein Ablaufdatum oder lege ein benutzerdefiniertes Startdatum und die Anzahl der Stunden fest, nach denen der Schl\u00fcssel abl\u00e4uft.<\/li>\n<li>Gib dem Schl\u00fcssel einen eindeutigen Namen.<\/li>\n<li>Klicke auf <strong>Generieren<\/strong>.<\/li>\n<\/ol>\n<p>Nachdem du einen API-Schl\u00fcssel generiert hast, kopiere ihn und bewahre ihn an einem sicheren Ort auf (es wird empfohlen, einen <a href=\"https:\/\/kinsta.com\/de\/blog\/passwort-manager\/\">Passwortmanager<\/a> zu verwenden). Du kannst mehrere API-Schl\u00fcssel erstellen, die dann auf der Seite <strong>API-Schl\u00fcssel<\/strong> aufgelistet werden. Wenn du einen API-Schl\u00fcssel widerrufen musst, klicke auf die Schaltfl\u00e4che <strong>Widerrufen<\/strong>.<\/p>\n<h2>Verwalte die Plugins deiner Website mit Kinsta API und React<\/h2>\n<p>Wir beginnen mit der Entwicklung einer Benutzeroberfl\u00e4che in React, die dann in eine Chrome-Erweiterung umgewandelt wird. In dieser Anleitung werden grundlegende Kenntnisse \u00fcber React und die Interaktion mit der API vorausgesetzt.<\/p>\n<h3>Einrichten der Umgebung<\/h3>\n<p>Definiere zun\u00e4chst in der Datei <strong>App.jsx<\/strong> eine Konstante f\u00fcr die Kinsta-API-URL, um Redundanz in deinem Code zu vermeiden:<\/p>\n<pre><code class=\"language-js\">const KinstaAPIUrl = 'https:\/\/api.kinsta.com\/v2';<\/code><\/pre>\n<p>Aus Sicherheitsgr\u00fcnden solltest du sensible Daten wie deinen API-Schl\u00fcssel und die Kinsta-Firmen-ID in einer <strong>.env.local-Datei<\/strong> speichern, damit sie sicher sind und nicht in deinen Quellcode gelangen:<\/p>\n<pre><code class=\"language-bash\">VITE_KINSTA_COMPANY_ID=YOUR_COMPANY_ID\nVITE_KINSTA_API_KEY=YOUR_API_KEY<\/code><\/pre>\n<h3>Daten mit der Kinsta-API abrufen<\/h3>\n<p>In der <strong>App.jsx-Datei<\/strong> musst du mehrere Anfragen an die Kinsta-API stellen, um Informationen \u00fcber Websites und ihre Plugins abzurufen.<\/p>\n<ol start=\"1\">\n<li><strong>Abrufen von Unternehmenswebsites:<\/strong> Beginne damit, eine Liste der Websites abzurufen, die mit deinem Kinsta-Unternehmenskonto verbunden sind. Verwende die Unternehmens-ID in einer GET-Anfrage, die ein Array mit Standortdetails zur\u00fcckgibt.\n<pre><code class=\"language-jsx\">const getListOfCompanySites = async () =&gt; {\n      const query = new URLSearchParams({\n        company: import.meta.env.VITE_KINSTA_COMPANY_ID,\n      }).toString();\n      const resp = await fetch(`${KinstaAPIUrl}\/sites?${query}`, {\n        method: 'GET',\n        headers: {\n          Authorization: `Bearer ${import.meta.env.VITE_KINSTA_API_KEY}`,\n        },\n      });\n      const data = await resp.json();\n      const companySites = data.company.sites;\n      return companySites;\n    }<\/code><\/pre>\n<\/li>\n<li><strong>Rufe die Umgebungsdaten f\u00fcr jede Website ab:<\/strong> Rufe f\u00fcr jeden Standort die Umgebungen ab, einschlie\u00dflich der Umgebungs-ID, die f\u00fcr weitere Anfragen ben\u00f6tigt wird. Dazu musst du jede Webiste zuordnen und einen API-Aufruf an den Endpunkt <code>\/sites\/${siteId}\/environments<\/code> t\u00e4tigen.\n<pre><code class=\"language-jsx\"> const companySites = await getListOfCompanySites();\n    \/\/ Get all environments for each site\n\n    const sitesEnvironmentData = companySites.map(async (site) =&gt; {\n      const siteId = site.id;\n      const resp = await fetch(`${KinstaAPIUrl}\/sites\/${siteId}\/environments`, {\n        method: 'GET',\n        headers: {\n          Authorization: `Bearer ${import.meta.env.VITE_KINSTA_API_KEY}`,\n        },\n      });\n      const data = await resp.json();\n      const environments = data.site.environments;\n      return {\n        id: siteId,\n        name: site.display_name,\n        environments: environments,\n      };\n    });<\/code><\/pre>\n<\/li>\n<li><strong>Abrufen von Plugins f\u00fcr jede Seiten-Umgebung:<\/strong> Schlie\u00dflich verwendest du die Umgebungs-ID, um Plugins f\u00fcr jede Website abzurufen. Dieser Schritt umfasst eine Zuordnungsfunktion und einen API-Aufruf an den Endpunkt <code>\/sites\/environments\/${environmentId}\/plugins<\/code> f\u00fcr jede Umgebung.\n<pre><code class=\"language-jsx\">\/\/ Wait for all the promises to resolve\n    const sitesData = await Promise.all(sitesEnvironmentData);\n\n    \/\/ Get all plugins for each environment\n    const sitesWithPlugin = sitesData.map(async (site) =&gt; {\n      const environmentId = site.environments[0].id;\n      const resp = await fetch(\n        `${KinstaAPIUrl}\/sites\/environments\/${environmentId}\/plugins`,\n        {\n          method: 'GET',\n          headers: {\n            Authorization: `Bearer ${import.meta.env.VITE_KINSTA_API_KEY}`,\n          },\n        }\n      );\n      const data = await resp.json();\n      const plugins = data.environment.container_info;\n      return {\n        env_id: environmentId,\n        name: site.name,\n        site_id: site.id,\n        plugins: plugins,\n      };\n    });<\/code><\/pre>\n<p>Du kannst nun alle diese Anfragen in einer Funktion zusammenfassen, die das endg\u00fcltige Array der Websites mit grundlegenden Informationen \u00fcber jede Website und ihre Plugins zur\u00fcckgibt:<\/p>\n<pre><code class=\"language-jsx\">const getSitesWithPluginData = async () =&gt; {\n  const getListOfCompanySites = async () =&gt; {\n    const query = new URLSearchParams({\n      company: import.meta.env.VITE_KINSTA_COMPANY_ID,\n    }).toString();\n    const resp = await fetch(`${KinstaAPIUrl}\/sites?${query}`, {\n      method: 'GET',\n      headers: {\n        Authorization: `Bearer ${import.meta.env.VITE_KINSTA_API_KEY}`,\n      },\n    });\n    const data = await resp.json();\n    const companySites = data.company.sites;\n    return companySites;\n  }\n\n  const companySites = await getListOfCompanySites();\n\n  \/\/ Get all environments for each site\n  const sitesEnvironmentData = companySites.map(async (site) =&gt; {\n    const siteId = site.id;\n    const resp = await fetch(`${KinstaAPIUrl}\/sites\/${siteId}\/environments`, {\n      method: 'GET',\n      headers: {\n        Authorization: `Bearer ${import.meta.env.VITE_KINSTA_API_KEY}`,\n      },\n    });\n    const data = await resp.json();\n    const environments = data.site.environments;\n    return {\n      id: siteId,\n      name: site.display_name,\n      environments: environments,\n    };\n  });\n\n  \/\/ Wait for all the promises to resolve\n  const sitesData = await Promise.all(sitesEnvironmentData);\n\n  \/\/ Get all plugins for each environment\n  const sitesWithPlugin = sitesData.map(async (site) =&gt; {\n    const environmentId = site.environments[0].id;\n    const resp = await fetch(\n      `${KinstaAPIUrl}\/sites\/environments\/${environmentId}\/plugins`,\n      {\n        method: 'GET',\n        headers: {\n          Authorization: `Bearer ${import.meta.env.VITE_KINSTA_API_KEY}`,\n        },\n      }\n    );\n    const data = await resp.json();\n    const plugins = data.environment.container_info;\n    return {\n      env_id: environmentId,\n      name: site.name,\n      site_id: site.id,\n      plugins: plugins,\n    };\n  });\n\n  \/\/ Wait for all the promises to resolve\n  const sitesWithPluginData = await Promise.all(sitesWithPlugin);\n  return sitesWithPluginData;\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>Anzeige der Website-Daten<\/h3>\n<p>Erstelle einen Status mit dem <code>useState<\/code> Hook, um Websites mit veralteten Plugins zu speichern. Der <code>useEffect<\/code> Hook ruft auch die <code>getSitesWithPluginData()<\/code> Methode auf und extrahiert die Websitedaten, wenn die Komponente montiert wird.<\/p>\n<p>Erstelle im <code>useEffect<\/code> Hook eine Funktion, die in einer Schleife alle Websites mit veralteten Plugins herausfiltert und sie dann im Status speichert:<\/p>\n<pre><code class=\"language-jsx\">const [sitesWithOutdatedPlugin, setSitesWithOutdatedPlugin] = useState([]);\nconst [isLoading, setIsLoading] = useState(true);\n\nuseEffect(() =&gt; {\n  const checkSitesWithPluginUpdate = async () =&gt; {\n    const sitesWithPluginData = await getSitesWithPluginData();\n    const sitesWithOutdatedPlugin = sitesWithPluginData.map((site) =&gt; {\n      const plugins = site.plugins.wp_plugins.data;\n      const outdatedPlugins = plugins.filter((plugin) =&gt; plugin.update === \"available\");\n      if (outdatedPlugins.length &gt; 0) {\n        const kinstaDashboardPluginPageURL = `https:\/\/my.kinsta.com\/sites\/plugins\/${site.site_id}\/${site.env_id}?idCompany=${import.meta.env.VITE_KINSTA_COMPANY_ID}`;\n        return {\n          name: site.name,\n          plugins: outdatedPlugins,\n          url: kinstaDashboardPluginPageURL,\n        };\n      }\n    });\n\n    setSitesWithOutdatedPlugin(sitesWithOutdatedPlugin);\n\n  checkSitesWithPluginUpdate();\n  setIsLoading(false);\n}, []);<\/code><\/pre>\n<p>Im obigen Code siehst du, dass auch der Ladezustand erstellt und standardm\u00e4\u00dfig auf <code>true<\/code> gesetzt wird. Damit wird gesteuert, wie die Daten angezeigt werden. Wenn alle Daten geladen sind, setzen wir ihn auf <code>false<\/code>.<\/p>\n<p>Unten findest du ein Markup, mit dem du die Daten der Website und die Plugins in deiner Benutzeroberfl\u00e4che darstellen kannst.<\/p>\n<pre><code class=\"language-jsx\">import { useEffect, useState } from \"react\"\nimport KinstaLogo from '.\/assets\/kinsta-logo.png'\nimport PluginPage from '.\/components\/PluginsPage'\n\nfunction App() {\n  \/\/ load the data from the API\n  return (\n    &lt;div className=\"container\"&gt;\n        &lt;div&gt;\n          &lt;div&gt; className=\"title-section\"&gt;\n            &lt;img src={KinstaLogo} className=\"logo\" alt=\"\" \/&gt;\n          &lt;\/div&gt;\n          &lt;p&gt; className=\"info-box\"&gt;\n            Get quick information about your site plugins that need update.\n          &lt;\/p&gt;\n          {isLoading ? (\n            &lt;p&gt;Loading...&lt;\/p&gt;\n          ) : (\n            &lt;&gt;\n              &lt;div className=\"content\"&gt;\n                &lt;p&gt;The following sites have plugins that need to be updated.&lt;\/p&gt;\n                {sitesWithOutdatedPlugin.map((site, index) =&gt; {\n                  return (\n                    &lt;PluginPage key={index} {...site} \/&gt;\n                  );\n                })}\n              &lt;\/div&gt;\n            &lt;\/&gt;\n          )}\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n  )\n}\nexport default App<\/code><\/pre>\n<p>Der Code enth\u00e4lt eine Kopfzeile mit einem Logo und einem informativen Absatz. Der Inhalt der Benutzeroberfl\u00e4che wird abh\u00e4ngig vom Zustand von <code>isLoading<\/code> dargestellt. Wenn die Daten noch nicht geladen sind, wird eine Ladebest\u00e4tigung angezeigt. Sobald die Daten geladen sind, werden die Daten \u00fcber die Websites und alle Plugins, die aktualisiert werden m\u00fcssen, angezeigt.<\/p>\n<p>Du wirst auch eine Komponente bemerken: <code>PluginPage<\/code> (<strong>PluginPage.jsx<\/strong>). Diese Komponente dient dazu, einzelne Websites und ihre Plugin-Details anzuzeigen. Sie enth\u00e4lt eine Funktion, mit der die Sichtbarkeit der Plugin-Details umgeschaltet werden kann.<\/p>\n<pre><code class=\"language-jsx\">import { useState } from \"react\"\nimport { FaRegEye } from \"react-icons\/fa\";\nimport { FaRegEyeSlash } from \"react-icons\/fa\";\n\nconst PluginUse = (site) =&gt; {\n    const [viewPlugin, setViewPlugin] = useState(false);\n\n    return (\n        &lt;&gt;\n            &lt;div className=\"site-card\"&gt;\n                &lt;div className=\"site-card-details\"&gt;\n                    &lt;p&gt;{site.name}&lt;\/p&gt;\n                    &lt;div className=\"both-btns\"&gt;\n                        &lt;a&gt; href={site.url} target=\"_blank\" rel=\"noreferrer\" className=\"btn\"&gt;\n                            View in MyKinsta\n                        &lt;\/a&gt;\n                        &lt;button onClick={() =&gt; setViewPlugin(!viewPlugin)} className=\"btn\" title=\"View Plugins\"&gt;\n                            {viewPlugin ? &lt;FaRegEyeSlash \/&gt; : &lt;FaRegEye \/&gt;}\n                        &lt;\/button&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n                {viewPlugin && (\n                    &lt;div className=\"plugin-list\"&gt;\n                        {site.plugins.map((plugin, index) =&gt; {\n                            return (\n                                &lt;div key={index} className=\"plugin-card\"&gt;\n                                    &lt;p&gt;{plugin.name}&lt;\/p&gt;\n                                    &lt;div className=\"plugin-version-info\"&gt;\n                                        &lt;p&gt;Current Version: {plugin.version}&lt;\/p&gt;\n                                        &lt;p&gt;Latest Version: {plugin.update_version}&lt;\/p&gt;\n                                    &lt;\/div&gt;\n                                &lt;\/div&gt;\n                            );\n                        })}\n                    &lt;\/div&gt;\n                )}\n            &lt;\/div&gt;\n        &lt;\/&gt;\n    )\n}\nexport default PluginUse<\/code><\/pre>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Um deine Anwendung zu gestalten, kopiere den <a href=\"https:\/\/github.com\/olawanlejoel\/plugins-chome-extension\/blob\/main\/src\/index.css\" target=\"_blank\" rel=\"noopener noreferrer\">CSS-Code aus unserem Quellcode<\/a> und f\u00fcge ihn in deine eigene CSS-Datei ein.<\/p>\n<\/aside>\n\n<h3>Konfiguriere die Manifestdatei<\/h3>\n<p>Um deine Benutzeroberfl\u00e4che und Funktionen in eine Chrome-Erweiterung zu verwandeln, musst du die Datei <strong>manifest.json<\/strong> konfigurieren.<\/p>\n<p>Erstelle eine <strong>manifest.json-Datei<\/strong> im <strong>\u00f6ffentlichen<\/strong> Ordner und f\u00fcge den unten stehenden Code ein:<\/p>\n<pre><code class=\"language-json\">{\n    \"manifest_version\": 3,\n    \"name\": \"Kinsta Plugins Manager - Thanks to Kinsta API\",\n    \"description\": \"This extension allows you to manage your WordPress site's plugin from Kinsta's MyKinsta dashboard via Kinsta API.\",\n    \"version\": \"0.1.0\",\n    \"icons\": {\n        \"48\": \"kinsta-icon.png\"\n    },\n    \"action\": {\n        \"default_popup\": \"index.html\"\n    },\n    \"permissions\": [\n        \"tabs\"\n    ],\n    \"host_permissions\": [\n        \"https:\/\/my.kinsta.com\/*\"\n    ]\n}<\/code><\/pre>\n<p>Stelle sicher, dass du die Icon-Datei zu deinem <strong>\u00f6ffentlichen<\/strong> Ordner hinzuf\u00fcgst.<\/p>\n<p>Jetzt kannst du den Build-Befehl (<code>npm run build<\/code>) ausf\u00fchren, damit alle Assets, einschlie\u00dflich der <strong>manifest.json-Datei<\/strong>, der mit React erstellten <strong>index.html<\/strong> und anderer Dateien, in den <strong>dist-<\/strong> oder <strong>build-Ordner<\/strong> verschoben werden.<\/p>\n<p>Als N\u00e4chstes navigierst du zu <code>chrome:\/\/extensions\/<\/code> und l\u00e4dst diese als entpackte Erweiterung in Chrome. Klicke auf die Schaltfl\u00e4che <strong>Load Unpacked<\/strong> und w\u00e4hle das Verzeichnis aus, das du f\u00fcr deine Erweiterung erstellt hast.<\/p>\n<h3>Beschr\u00e4nkung der Erweiterung auf bestimmte Websites<\/h3>\n<p>Du hast bemerkt, dass diese Erweiterung jederzeit funktioniert. Wir m\u00f6chten, dass sie nur funktioniert, wenn ein Nutzer zum MyKinsta-Dashboard navigiert.<\/p>\n<p>Dazu m\u00fcssen wir die Datei <strong>App.jsx<\/strong> anpassen. Erstelle einen Status, um den aktiven Tab zu speichern:<\/p>\n<pre><code class=\"language-jsx\">const [activeTab, setActiveTab] = useState(null);<\/code><\/pre>\n<p>Als N\u00e4chstes aktualisierst du den <code>useEffect<\/code> Hook, um die Funktion <code>getCurrentTab<\/code> zu definieren und aufzurufen:<\/p>\n<pre><code class=\"language-jsx\">const getCurrentTab = async () =&gt; {\n  const queryOptions = { active: true, currentWindow: true };\n  const [tab] = await chrome.tabs.query(queryOptions);\n  setActiveTab(tab);\n}\ngetCurrentTab();<\/code><\/pre>\n<p>Der obige Code verwendet <code>chrome.tabs.query<\/code> mit bestimmten Abfrageoptionen, um sicherzustellen, dass nur die aktive Registerkarte im aktuellen Fenster abgerufen wird. Sobald die Registerkarte abgerufen wurde, wird sie als aktive Registerkarte im Status der Erweiterung festgelegt.<\/p>\n<p>Schlie\u00dflich musst du eine <a href=\"https:\/\/kinsta.com\/de\/blog\/react-bedingtes-rendering\/\">bedingte Rendering-Logik<\/a> in die R\u00fcckgabeanweisung deiner Komponente einbauen. Dadurch wird sichergestellt, dass die Plugin-Verwaltungsoberfl\u00e4che nur angezeigt wird, wenn sich der Nutzer auf dem MyKinsta-Dashboard befindet:<\/p>\n<pre><code class=\"language-jsx\">return (\n  &lt;div className=\"container\"&gt;\n    {activeTab?.url.includes('my.kinsta.com') ? (\n      &lt;div &gt;\n        &lt;div className=\"title-section\"&gt;\n          &lt;img src={KinstaLogo} className=\"logo\" alt=\"\" \/&gt;\n        &lt;\/div&gt;\n        &lt;p className=\"info-box\"&gt;\n          Get quick information about your site plugins that need update.\n        &lt;\/p&gt;\n        {isLoading ? (\n          &lt;p&gt;Loading...&lt;\/p&gt;\n        ) : (\n          &lt;&gt;\n            &lt;div className=\"content\"&gt;\n              &lt;p&gt;The following {sitesWithPluginUpdate} sites have plugins that need to be updated.&lt;\/p&gt;\n              {sitesWithOutdatedPlugin.map((site, index) =&gt; {\n                return (\n                  &lt;PluginPage key={index} {...site} \/&gt;\n                );\n              })}\n            &lt;\/div &gt;\n          &lt;\/&gt;\n        )}\n      &lt;\/div &gt;\n    ) : (\n      &lt;div &gt;\n        &lt;div className=\"title-section\"&gt;\n          &lt;img src={KinstaLogo} className=\"logo\" alt=\"\" \/&gt;\n        &lt;\/div&gt;\n        &lt;p className=\"info-box\"&gt;\n          This extension is only available on Kinsta Dashboard.\n        &lt;\/p&gt;\n      &lt;\/div&gt;\n    )}\n  &lt;\/div&gt;\n)<\/code><\/pre>\n<p>Nachdem du die \u00c4nderungen vorgenommen hast, erstelle deine Anwendung neu und lade die Chrome-Erweiterung erneut. Dadurch werden die neue Logik und die Einschr\u00e4nkungen \u00fcbernommen.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>In diesem Artikel hast du die Grundlagen f\u00fcr die Erstellung einer Chrome-Erweiterung gelernt und erfahren, wie du sie mit React erstellst. Du hast auch gelernt, wie du eine Erweiterung erstellst, die mit der Kinsta-API interagiert.<\/p>\n<p>Als Kinsta-Nutzer kannst du das enorme Potenzial und die Flexibilit\u00e4t der Kinsta-API nutzen, um individuelle L\u00f6sungen f\u00fcr die Verwaltung deiner Websites, Anwendungen und Datenbanken zu entwickeln.<\/p>\n<p><em>Welchen Endpunkt der Kinsta-API hast du schon oft benutzt und wie hast du ihn genutzt? Teile es uns im Kommentarbereich mit!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Als Nutzer von Google Chrome hast du wahrscheinlich schon einige Erweiterungen in diesem Browser verwendet. Hast du dich jemals gefragt, wie sie aufgebaut sind oder ob &#8230;<\/p>\n","protected":false},"author":287,"featured_media":70047,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[925,944,952,975],"class_list":["post-70046","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api","topic-google-chrome","topic-javascript-tutorials","topic-react"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Erstelle eine Chrome-Erweiterung mit Kinsta API und React - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Lerne, wie du eine Chrome-Erweiterung mit React und der Kinsta-API erstellst, um Plugins auf WordPress-Websites zu verwalten, die bei Kinsta gehostet werden.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wie du mit der Kinsta API und React eine Chrome-Erweiterung zur Verwaltung der Plugins deiner Website erstellst\" \/>\n<meta property=\"og:description\" content=\"Lerne, wie du eine Chrome-Erweiterung mit React und der Kinsta-API erstellst, um Plugins auf WordPress-Websites zu verwalten, die bei Kinsta gehostet werden.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-14T14:42:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-24T13:46:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Lerne, wie du eine Chrome-Erweiterung mit React und der Kinsta-API erstellst, um Plugins auf WordPress-Websites zu verwalten, die bei Kinsta gehostet werden.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react-1024x512.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"17\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Wie du mit der Kinsta API und React eine Chrome-Erweiterung zur Verwaltung der Plugins deiner Website erstellst\",\"datePublished\":\"2024-05-14T14:42:23+00:00\",\"dateModified\":\"2024-05-24T13:46:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/\"},\"wordCount\":2157,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react.jpg\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/\",\"name\":\"Erstelle eine Chrome-Erweiterung mit Kinsta API und React - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react.jpg\",\"datePublished\":\"2024-05-14T14:42:23+00:00\",\"dateModified\":\"2024-05-24T13:46:10+00:00\",\"description\":\"Lerne, wie du eine Chrome-Erweiterung mit React und der Kinsta-API erstellst, um Plugins auf WordPress-Websites zu verwalten, die bei Kinsta gehostet werden.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Google Chrome\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/google-chrome\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Wie du mit der Kinsta API und React eine Chrome-Erweiterung zur Verwaltung der Plugins deiner Website erstellst\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Erstelle eine Chrome-Erweiterung mit Kinsta API und React - Kinsta\u00ae","description":"Lerne, wie du eine Chrome-Erweiterung mit React und der Kinsta-API erstellst, um Plugins auf WordPress-Websites zu verwalten, die bei Kinsta gehostet werden.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/","og_locale":"de_DE","og_type":"article","og_title":"Wie du mit der Kinsta API und React eine Chrome-Erweiterung zur Verwaltung der Plugins deiner Website erstellst","og_description":"Lerne, wie du eine Chrome-Erweiterung mit React und der Kinsta-API erstellst, um Plugins auf WordPress-Websites zu verwalten, die bei Kinsta gehostet werden.","og_url":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2024-05-14T14:42:23+00:00","article_modified_time":"2024-05-24T13:46:10+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react.jpg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Lerne, wie du eine Chrome-Erweiterung mit React und der Kinsta-API erstellst, um Plugins auf WordPress-Websites zu verwalten, die bei Kinsta gehostet werden.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react-1024x512.jpg","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Joel Olawanle","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Wie du mit der Kinsta API und React eine Chrome-Erweiterung zur Verwaltung der Plugins deiner Website erstellst","datePublished":"2024-05-14T14:42:23+00:00","dateModified":"2024-05-24T13:46:10+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/"},"wordCount":2157,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react.jpg","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/","url":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/","name":"Erstelle eine Chrome-Erweiterung mit Kinsta API und React - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react.jpg","datePublished":"2024-05-14T14:42:23+00:00","dateModified":"2024-05-24T13:46:10+00:00","description":"Lerne, wie du eine Chrome-Erweiterung mit React und der Kinsta-API erstellst, um Plugins auf WordPress-Websites zu verwalten, die bei Kinsta gehostet werden.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2024\/05\/wp-build-a-chrome-extension-with-kinsta-api-and-react.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/chrome-erweiterung-erstellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Google Chrome","item":"https:\/\/kinsta.com\/de\/thema\/google-chrome\/"},{"@type":"ListItem","position":3,"name":"Wie du mit der Kinsta API und React eine Chrome-Erweiterung zur Verwaltung der Plugins deiner Website erstellst"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/de\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/70046","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=70046"}],"version-history":[{"count":4,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/70046\/revisions"}],"predecessor-version":[{"id":70086,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/70046\/revisions\/70086"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/70046\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/70046\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/70046\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/70046\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/70046\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/70046\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/70046\/translations\/es"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/70046\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/70047"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=70046"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=70046"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=70046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}