Beispiel: Bildeinfügung mithilfe eines Inhaltsskripts
In diesem Beispiel wird JavaScript-Code verwendet, um das stars.jpeg
Bild oben auf der aktuellen Webseite innerhalb des <body>
-Elements einzufügen. Das Popupfenster der Erweiterung enthält einen Titel und eine HTML-Schaltfläche mit der Bezeichnung Bild einfügen. Wenn Sie auf die Schaltfläche Bild einfügen klicken, sendet der JavaScript-Code der Erweiterung eine Nachricht aus dem Popupfenster des Erweiterungssymbols und fügt dynamisch JavaScript ein, das auf der Browserregisterkarte ausgeführt wird.
In diesem Beispiel werden die folgenden Erweiterungsfeatures veranschaulicht:
- Einfügen von JavaScript-Bibliotheken in eine Erweiterung.
- Verfügbarmachen von Erweiterungsressourcen auf Browserregisterkarten.
- Einschließen von Inhaltswebseiten in vorhandene Browserregisterkarten.
- Inhaltswebseiten lauschen auf Nachrichten aus Popups und antworten.
Vorschau des Beispiels
Sie installieren das Erweiterungsbeispiel über die Registerkarte Erweiterungen verwalten des Browsers, klicken Sie auf die Schaltfläche Erweiterungen (), um die Liste der installierten Erweiterungen anzuzeigen, und klicken Sie dann auf diese Beispielerweiterung:
Die Erweiterung zeigt eine kleine HTML-Webseite in einem Popupfenster an, die einen Titel, eine Schaltfläche "Bild einfügen " und Anweisungen enthält:
Wenn Sie auf die Schaltfläche Bild einfügen klicken, wird JavaScript-Code vorübergehend am oberen Rand der aktuellen Webseite eingefügt stars.jpeg
, wodurch der Inhalt der Webseite unter das Bild verschoben wird. Der eingefügte Inhalt legt das image-Element so fest, dass das statische Bild stars.jpeg
oben auf der aktuellen Webseite angezeigt wird:
Wenn Sie auf das Bild klicken, entfernt das eingefügte JavaScript das Bild aus der DOM-Struktur und webseite.
Rufen Sie das Beispiel wie folgt ab, installieren Sie es und führen Sie es aus.
Klonen des MicrosoftEdge-Extensions-Repositorys
Sie können verschiedene Tools verwenden, um ein GitHub-Repository zu klonen. Sie können ein ausgewähltes Verzeichnis herunterladen oder das gesamte Repository klonen.
Klonen Sie das Repository MicrosoftEdge-Extensions auf Ihr lokales Laufwerk, und wechseln Sie dann wie folgt zu einem Arbeitsbranch.
Geben Sie in einer Eingabeaufforderung ein
git
, um zu überprüfen, ob Git installiert ist.Falls noch nicht geschehen, laden Sie Git herunter , und installieren Sie es.
Wenn dies noch nicht geschehen ist, starten Sie eine Eingabeaufforderung, in der Git installiert ist.
Wechseln Sie zu dem Verzeichnis, in das Sie das Repository MicrosoftEdge-Extensions klonen möchten. Zum Beispiel:
cd C:/Users/localAccount/GitHub/
Navigieren Sie in Microsoft Edge zum Repository MicrosoftEdge-Extensions .
Klicken Sie rechts neben der grünen Schaltfläche Code auf den Pfeil nach unten, und klicken Sie dann im Abschnitt Klonen mithilfe der Web-URL auf die Schaltfläche URL in Zwischenablage kopieren neben
https://github.com/microsoft/MicrosoftEdge-Extensions.git
.Geben Sie im Eingabeaufforderungsfenster den folgenden Befehl ein:
git clone https://github.com/microsoft/MicrosoftEdge-Extensions.git
Das
/MicrosoftEdge-Extensions/
Verzeichnis wird innerhalb des von Ihnen angegebenen Verzeichnisses hinzugefügt.
Erstellen eines Arbeitsbranchs und Wechseln zu diesem Branch
Überprüfen Sie die Liste der Verzeichnisse:
ls
Das
/MicrosoftEdge-Extensions/
Verzeichnis ist aufgeführt.Wechseln Sie zum neuen Verzeichnis:
cd MicrosoftEdge-Extensions
Erstellen Sie einen Arbeitsbranch:
git branch test
Wechseln Sie zum Arbeitsbranch:
git switch test
Ertrag:
Switched to branch 'test'
Sie können jetzt den Code in Ihrem Arbeitsbranch ändern, ohne den Code im Branch "Standard" des Repositorys zu ändern. Später möchten Sie möglicherweise zurück zum Branch "Standard" wechseln oder einen anderen Branch basierend auf dem Branch "Standard" erstellen.
Lokales Installieren des Beispiels
Anstatt das Beispiel aus dem Store zu installieren, installieren Sie das Beispiel lokal, sodass Sie es möglicherweise ändern und die Änderungen schnell testen können. Lokales Installieren wird manchmal als Querladen einer Erweiterung bezeichnet.
Klicken Sie in Microsoft Edge neben der Adressleiste auf die Schaltfläche Erweiterungen (), wenn dieses Symbol angezeigt wird. Oder wählen Sie Einstellungen und mehr (>Erweiterungen aus. Das Popupfenster Erweiterungen wird geöffnet:
Klicken Sie auf Erweiterungen verwalten. Die Seite Erweiterungsverwaltung wird auf einer neuen Registerkarte geöffnet:
Aktivieren Sie die Umschaltfläche Entwicklermodus .
Wenn Sie die Beispielerweiterung zum ersten Mal installieren, klicken Sie auf die Schaltfläche Entpackt laden ( Das Dialogfeld Erweiterungsverzeichnis auswählen wird geöffnet.
Wählen Sie das Verzeichnis aus, das die Quelldateien der Erweiterung enthält, z
manifest.json
. B. .Beispielpfad:
C:\Users\localAccount\GitHub\MicrosoftEdge-Extensions\Extension-samples\picture-inserter-content-script
Klicken Sie auf die Schaltfläche Ordner auswählen .
Das Dialogfeld Erweiterungsverzeichnis auswählen wird geschlossen.
Die Erweiterung wird im Browser installiert, ähnlich wie eine Erweiterung, die aus dem Store installiert wird:
Ausführen des Beispiels
Wechseln Sie in einem neuen Fenster oder einer neuen Registerkarte zu einer Webseite, z. B. toDO-App. Die Registerkarte darf nicht leer sein und darf nicht die Seite Erweiterungen verwalten sein, da in diesem Beispiel Inhalt in die aktuelle Webseite eingefügt wird.
Aktualisieren Sie die Webseite. Dies ist manchmal erforderlich, nachdem eine Erweiterung neu geladen wurde.
Wenn dieses Symbol in Microsoft Edge rechts neben der Adressleiste angezeigt wird, klicken Sie auf die Schaltfläche Erweiterungen (). Oder wählen Sie Einstellungen und mehr (>Erweiterungen aus.
Das Popupfenster Erweiterungen wird geöffnet:
Klicken Sie auf das Symbol oder den Namen der Erweiterung (Bildeinfügung mit Inhaltsskript).
Die Erweiterung wird geöffnet, und das Symbol der Erweiterung wird neben der Adressleiste und dem Symbol Erweiterungen () hinzugefügt.
Ein Popupfenster wird geöffnet, das eine kleine HTML-Webseite mit einem Titel, einer Schaltfläche "Bild einfügen " und Anweisungen enthält:
Klicken Sie auf die Schaltfläche Bild einfügen .
stars.jpeg
wird oben auf der aktuellen Webseite auf der aktuellen Registerkarte eingefügt, wodurch der Inhalt der Webseite unter das Bild verschoben wird:Klicken Sie auf das
stars.jpeg
Bild, das oben auf der Webseite ausfüllt. Dieses Bildelement wird aus der DOM-Struktur und der Webseite entfernt, und die aktuelle Webseite wird wiederhergestellt, wobei der Inhalt wieder nach oben auf der Registerkarte verschoben wird.
Die Erweiterung sendet eine Nachricht aus dem Popupfenster des Erweiterungssymbols und fügt dynamisch JavaScript ein, das als Inhalt ausgeführt wird, auf der Browserregisterkarte. Der eingefügte Inhalt legt fest, dass das Bildelement oben auf der aktuellen Webseite angezeigt wird stars.jpeg
, und entfernt dann das Bild, wenn Sie auf das Bild klicken.
Siehe auch:
Untersuchen des Beispiels
In den folgenden Abschnitten untersuchen Sie das Beispiel. Anschließend können Sie zum Entwickeln Ihrer eigenen Microsoft Edge-Erweiterung das Verzeichnis des Beispiels kopieren und ändern sowie die resultierende Erweiterung installieren und testen.
Dateien und Verzeichnisse
Das Beispiel weist die folgende Verzeichnisstruktur und die folgenden Dateien auf.
Beispielpfad für das Beispiel:
C:\Users\localAccount\GitHub\MicrosoftEdge-Extensions\Extension-samples\picture-inserter-content-script
Verzeichnisse und Dateien im /picture-inserter-content-script/
Verzeichnis:
/content-scripts/
content.js
/icons/
extension-icon16x16.png
extension-icon32x32.png
extension-icon48x48.png
extension-icon128x128.png
/images/
stars.jpeg
/popup/
popup.html
popup.js
manifest.json
- Das
/content-scripts/
Verzeichnis enthältcontent.js
das Skript, das in die aktuelle Webseite eingefügt wird. - Das
/icons/
Verzeichnis enthält Versionen einer.png
Datei, die verwendet wird, um die Erweiterung in der Nähe der Adressleiste des Browsers, im Popupfenster Erweiterungen und auf der Verwaltungsseite für Erweiterungen darzustellen. - Das
/images/
Verzeichnis enthältstars.jpeg
, das im Popupfenster der Erweiterung angezeigt wird. - Das
/popup/
Verzeichnis enthält die Dateien:-
popup.html
definiert den Inhalt der anfänglichen Popupwebseite der Erweiterung (Titel, Schaltfläche und Anweisungen). -
popup.js
für die erste Popupwebseite wird eine Nachricht an das Inhaltsskript (content.js
) gesendet, das auf der Registerkartenseite ausgeführt wird, und gibt an, welche Bilddatei angezeigt werden soll.
-
-
manifest.json
enthält grundlegende Informationen zur Erweiterung.
Strategie zum Aktualisieren der Webseite, um das Bild oben einzufügen (stars.jpeg
)
Dieses Beispiel enthält ein Inhaltsskript, das in die Webseite eingefügt wird, die auf der aktuellen Browserregisterkarte geladen wird.
Wenn Sie das Erweiterungsbeispiel ausführen, wird die erste Popup-HTML-Seite (
popup.html
) mit einem Titel, Anweisungen und der Schaltfläche Bild einfügen angezeigt.Wenn Sie auf die Schaltfläche Bild einfügen klicken, sendet javaScript (
popup.js
) für die erste Popupseite eine Nachricht an das Inhaltsskript (content.js
), das auf der Registerkartenseite ausgeführt wird. Die Meldung gibt an, welche Bilddatei angezeigt werden soll.Das auf der Registerkartenseite ausgeführte Inhaltsskript (
content.js
) empfängt die Meldung und zeigt die angegebene Bilddatei (stars.jpeg
) an.
Die anfängliche Popupwebseite (popup.html
)
/popup/popup.html
wird in der Manifestdatei als Webseite angegeben, die im anfänglichen Popupfenster der Erweiterung angezeigt werden soll. Die Manifestdatei enthält das Schlüsselfeld "default_popup": "popup/popup.html"
. Die Datei dieses Beispiels popup.html
ist eine kleine Webseite, die einen Titel, eine Schaltfläche Bild einfügen und Anweisungen enthält.
popup.html
:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<style>
body {
width: 500px;
}
button {
background-color: #336dab;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
font-size: 16px;
}
</style>
</head>
<body>
<h1>Picture inserter using a content script</h1>
<button id="sendmessageid">Insert picture</button>
<script src="popup.js"></script>
<p>Click the displayed image to remove it from the webpage.</p>
</body>
</html>
JavaScript (popup.js
) für die anfängliche Popupseite, um eine Nachricht an das eingefügte JavaScript zu senden
/popup/popup.js
sendet eine Nachricht an das Inhaltsskript (content.js
), das vorübergehend in die Browserregisterkarte eingefügt wird. Fügen Sie dazu popup.js
der Schaltfläche Bild einfügen der Popupwebseite ein onclick
Ereignis hinzu, das die ID sendmessageid
aufweist:
popup.js
(Teil):
const sendMessageId = document.getElementById("sendmessageid");
if (sendMessageId) {
sendMessageId.onclick = function() {
...
};
}
chrome.tabs.query
Sucht in popup.js
nach der aktuellen Browserregisterkarte und sendet dann chrome.tabs.sendMessage
eine Nachricht an diese Registerkarte. Das Beispiel übergibt die ID der aktuellen Registerkarte. Die Nachricht muss die URL für das Bild enthalten, das angezeigt wird.
Sie müssen eine eindeutige ID senden, die dem eingefügten Bild zugewiesen werden soll, um das Imageelement später erneut zu finden und zu löschen. Um eine eindeutige ID zu senden, die dem eingefügten Bild zugewiesen werden soll, wird die eindeutige ID in popup.js
generiert und an das Inhaltsskript übergeben.
popup.js
(vollständig):
const sendMessageId = document.getElementById("sendmessageid");
if (sendMessageId) {
sendMessageId.onclick = function() {
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
chrome.tabs.sendMessage(
tabs[0].id,
{
url: chrome.runtime.getURL("images/stars.jpeg"),
imageDivId: crypto.randomUUID(),
tabId: tabs[0].id
},
function(response) {
window.close();
}
);
});
};
}
Der Nachrichtenlistener des Inhaltsskripts (content.js
)
Dies ist die Datei, die content-scripts\content.js
in jede Browserregisterkartenseite eingefügt wird. Diese Datei ist im Abschnitt in content-scripts
manifest.json
aufgeführt.
content.js
(vollständig):
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
const img = document.createElement("img");
img.id = request.imageDivId;
img.src = request.url;
img.style = "height: auto; width: 90vw;";
document.body.prepend(img);
img.addEventListener("click", () => {
img.remove();
}, { once: true });
sendResponse({ fromcontent: "This message is from content.js" });
});
content.js
registriert einen Listener mithilfe der chrome.runtime.onMessage.addListener
Erweiterungs-API-Methode. Dieser Listener wartet auf die Nachricht, die beim popup.js
Aufrufen chrome.tabs.sendMessage
von gesendet wird.
In content.js
akzeptiert die addListener
Methode einen einzelnen Parameter, der eine Funktion ist. Der erste Parameter dieser Funktion, request
, enthält die Details der Nachricht, die übergeben wird.
Wenn content.js
in ein Ereignis vom Listener verarbeitet wird, wird die an übergebene addListener
Listenerfunktion ausgeführt. Der erste Parameter der übergebenen Listenerfunktion ist ein request
Objekt mit Attributen, die von zugewiesen sind sendMessage
.
In popup.js
sind url
für den chrome.tabs.sendMessage
Methodenaufruf die Attribute des zweiten Parameters für sendMessage
, imageDivId
und tabId
.
Dies ist die isolierte Listenerfunktion, die an addListener
übergeben wird:
content.js
(Teil)
function(request, sender, sendResponse) {
const img = document.createElement("img");
img.id = request.imageDivId;
img.src = request.url;
img.style = "height: auto; width: 90vw;";
document.body.prepend(img);
img.addEventListener("click", () => {
img.remove();
}, { once: true });
sendResponse({ fromcontent: "This message is from content.js" });
}
Die ersten fünf Zeilen in der Listenerfunktion fügen ein img
Element direkt unterhalb des Elements auf der body
Browserregisterkarte an.
Die zweite Zeile in der Listenerfunktion, img.id = request.imageDivId;
, legt die ID des img
Elements auf die imageDivId
der übergebenen Anforderung fest.
In der Listenerfunktion fügt der addEventListener
Aufruf eine click
Ereignislistenerfunktion hinzu, die das gesamte Bild abdeckt, sodass der Benutzer auf eine beliebige Stelle auf das Bild klicken kann. Wenn Sie auf das eingefügte Bild klicken, wird das Bild durch die Zeile img.remove();
von der aktuellen Webseite entfernt, und der Ereignislistener wird ebenfalls entfernt, indem angegeben { once: true }
wird.
Wie stars.jpeg
wird auf jeder Browserregisterkarte verfügbar gemacht?
So stellen Sie eine images/stars.jpeg
beliebige Browserregisterkarte zur Verfügung:
-
popup.js
(oben) verwendet diechrome.runtime.getURL
API. - Das Manifest (unten) gibt an, dass
web_accessible_resources
vom Typ.jpeg
mit allen URLs übereinstimmt.
Im Beispiel wird das Bild mithilfe des src
-Attributs des img
-Elements in die Inhaltsseite eingefügt. Die Inhaltsseite wird in einem eindeutigen Thread ausgeführt, der nicht mit dem Thread identisch ist, der die Erweiterung ausführt. Die statische Bilddatei muss als Webressource verfügbar gemacht werden, damit sie ordnungsgemäß funktioniert.
In der manifest.json
Datei wird ein weiterer Eintrag hinzugefügt, um zu deklarieren, dass das Bild für alle Browserregisterkarten verfügbar ist:
/manifest.json
(Teil):
"web_accessible_resources": [
{
"resources": ["images/*.jpeg"],
"matches": ["<all_urls>"]
}
]
Der Code in der popup.js
Datei sendet eine Nachricht an die Inhaltsseite, die in die aktuell aktive Registerkartenseite eingebettet ist.
So werden Ressourcen im Manifest aufgelistet (manifest.json
)
Im Beispiel wird die Inhaltsseite erstellt und eingefügt, die auf der aktuellen aktiven Registerkartenseite eingebettet ist.
manifest.json
enthält und content-scripts
web_accessible_resources
wie folgt:
/manifest.json
(vollständig):
{
"name": "Picture inserter using content script",
"version": "0.0.0.1",
"manifest_version": 3,
"description": "A browser extension that uses JavaScript to insert an image at the top of the current webpage.",
"icons": {
"16": "icons/extension-icon16x16.png",
"32": "icons/extension-icon32x32.png",
"48": "icons/extension-icon48x48.png",
"128": "icons/extension-icon128x128.png"
},
"action": {
"default_popup": "popup/popup.html"
},
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": ["content-scripts/content.js"]
}
],
"web_accessible_resources": [
{
"resources": ["images/*.jpeg"],
"matches": ["<all_urls>"]
}
]
}
Der Abschnitt des Manifests content_scripts
fügt JavaScript in alle Browserregisterkarten ein.
content_scripts
Im Schlüsselabschnitt der Manifestdatei wird das matches
-Attribut auf <all_urls>
festgelegt. Dies bedeutet, dass .js
(oder .css
) dateien, die content_scripts
im Schlüsselabschnitt angegeben sind, in alle Browserregisterkartenseiten eingefügt werden, wenn jede Registerkarte geladen wird. Die zulässigen Dateitypen, die eingefügt werden können, sind JavaScript (.js
) und CSS (.css
).
Das Manifest dieses Beispiels gibt ein einzelnes Inhaltsskript an, content-scripts/content.js
.
Jedes Inhaltsskript wird in einem eigenen Thread mit Sandkasten ausgeführt.
Jede Registerkartenseite (und Erweiterung) wird in einem eigenen Thread ausgeführt. Auch wenn die Browserregisterkarte eine Webseite enthält, auf der JavaScript-Code ausgeführt wird, hat das content.js
Skript, das von der Erweiterung in diese Browserregisterkarte eingefügt wird, keinen Zugriff auf diesen JavaScript-Code. Das eingefügte Inhaltsskript hat nur Zugriff auf das DOM der Webseite.
Nächste Schritte
Um Ihre eigene Microsoft Edge-Erweiterung zu entwickeln, können Sie das Verzeichnis des Beispiels kopieren und ändern sowie die resultierende Erweiterung installieren und testen.
Siehe auch
- Beispiel: Bildanzeige-Popupwebseite
- Querladen einer Erweiterung, um sie lokal zu installieren und zu testen
GitHub:
-
MicrosoftEdge-Extensions-Repository .
- /picture-inserter-content-script/ – Quellcode dieses Beispiels.