Wie schreibe ich eine Chrome-Erweiterung so, dass jedes Mal, wenn ein Benutzer auf das Symbol klickt, mein Skript ausgeführt wird, aber kein Popup geöffnet wird? (Ich würde dies selbst in den Dokumenten nachschlagen, aber aus irgendeinem Grund hörten sie plötzlich auf zu arbeiten und blätterten auf jeder Seite, bis ich an diesem Punkt angelangt war.)
Ich gehe davon aus, dass das Manifest nur korrekt eingerichtet wird. Folgendes habe ich jetzt:
{
"name": "My Extension",
"version": "0.1",
"description": "Does some simple stuff",
"browser_action": {
"popup" : "mine.html",
"default_icon": "logo.png"
},
"permissions": [
"notifications"
]
}
google-chrome
google-chrome-extension
Endophage
quelle
quelle
Wenn Sie kein Popup anzeigen möchten, entfernen Sie es zunächst
"popup" : "mine.html"
aus Ihremmanifest.json
(in Ihrer Frage angezeigten).Ihr
manifest.json
wird ungefähr so aussehen:{ "name": "My Extension", "version": "0.1", "manifest_version" : 2, "description": "Does some simple stuff", "background" : { "scripts" : ["background.js"] }, "browser_action": { "default_icon": "logo .png" }, "permissions": ["activeTab"] }
manifest_version
es da sein muss und es muss sein2
.activeTab
Berechtigung hinzugefügt wurde.Zweitens, um ein Skript auszuführen, wenn auf das Symbol geklickt wird, platzieren Sie den folgenden Code in Ihrer
background.js
Datei (der Dateiname ist in Ihrer angegebenmanifest.json
):chrome.browserAction.onClicked.addListener(function(tab) { chrome.tabs.executeScript(null, {file: "testScript.js"}); });
Schließlich
testScript.js
sollten Sie den Code eingeben, den Sie ausführen möchten, wenn Sie auf das Symbol klicken.quelle
js function buttonClicked(tab) { var msg = { message: "user clicked!" } chrome.tabs.sendMessage(tab.id, msg); }
onClicked
Listener nur ausgelöst, wenn Sie das Popup entfernen. Es ist das eine oder andere, nicht beides.Verwenden Sie anstelle der Angabe einer Popup-Seite die hier
chrome.browserAction.onClicked
dokumentierte API .quelle
Sie müssen eine Hintergrunddatei hinzufügen. Aber zuerst müssen Sie ein Attribut in manifest.json hinzufügen, wie z.
Benennen Sie jetzt eine Datei in Ihrem Erweiterungsordner als background.js. Es gibt eine Möglichkeit, Objekte aus dem Hintergrund an Ihre Inhaltsskripte zu senden. Angenommen, Ihr Inhaltsskript heißt content.js. Dann müssen Sie dieses Codefragment in die Datei background.js schreiben
Der obige Code sendet ein Objekt mit dem Namen msg an die Inhaltsseite, und dieses msg-Objekt hat die Eigenschaft txtt, die gleich "execute" ist. Als Nächstes müssen Sie die Werte im Inhaltsskript als vergleichen
Wenn Sie jetzt auf das Erweiterungssymbol klicken, wird ein Objekt mit dem Namen msg vom Hintergrund zum Inhalt gesendet. Die Funktion "recievefunc ()" vergleicht ihre txtt-Eigenschaft mit der Zeichenfolge "execute", wenn sie mit dem Rest des ausgeführten Codes übereinstimmt.
Hinweis: msg, txtt, sendfunc, receivefunc, mssg sind Variablen und keine Chrome-Schlüsselwörter, sodass Sie alles verwenden können, was Sie möchten.
ich hoffe es hilft.
:) :)
quelle
Dies war genau das, was ich brauchte, aber ich sollte Folgendes hinzufügen: Wenn Sie nur ein einmaliges Ereignis benötigen, z. B. wenn ein Benutzer auf das Symbol der Erweiterung klickt, sind Hintergrundseiten eine Verschwendung von Ressourcen, da sie die ganze Zeit im Hintergrund ausgeführt werden . Verwenden Sie stattdessen Ereignisseiten:
"background": { "scripts": ["script.js"], "persistent": false }
quelle
content_script
stattdessen das Skript verwenden und an Ihr DOM anhängen. Wenn Sie die Funktion "Nur im Hintergrund ausführen" verwenden, wird das Funktionskonzept der Verwendung des Hintergrunds von Anfang an zunichte gemacht. Nur ein Gedanke und das heißt nicht, dass diese Idee nicht funktionieren würde.