Beschrijving
Gebruik de chrome.action API om het icoon van de extensie in de Google Chrome-werkbalk te beheren.
Beschikbaarheid
Manifest
Als je de browser.action API wilt gebruiken, voer je een "manifest_version" van 3 in en neem je de "action"-sleutel op in je manifestbestand.
{
"name": "Action Extension",
...
"action": {
"default_icon": { // optional
"16": "images/icon16.png", // optional
"24": "images/icon24.png", // optional
"32": "images/icon32.png" // optional
},
"default_title": "Click Me", // optional, shown in tooltip
"default_popup": "popup.html" // optional
},
...
}
De sleutel "action" (en de onderliggende sleutels) is optioneel. Als je dit niet opneemt, wordt je extensie nog steeds getoond in de werkbalk om toegang te bieden tot het menu van de extensie. Daarom raden we je aan altijd minstens de sleutels "action" en "default_icon" op te nemen.
Concepten en gebruik
Onderdelen van de UI
Icoon
Het icoon is de hoofdafbeelding op de werkbalk voor je extensie en wordt ingesteld door de sleutel "default_icon" in de sleutel "action" van je manifest. Iconen moeten 16 apparaatonafhankelijke pixels (DIP's) breed en hoog zijn.
De sleutel "default_icon" is een woordenboek met formaten voor afbeeldingspaden. Chrome gebruikt deze iconen om te kiezen welke afbeeldingsschaal moet worden gebruikt. Als er geen exacte overeenkomst wordt gevonden, selecteert Chrome de dichtstbijzijnde beschikbare afbeelding en schaalt deze zodat deze in de afbeelding past. Dit kan de afbeeldingskwaliteit beïnvloeden.
Omdat apparaten met minder gebruikelijke schaalfactoren zoals 1,5x of 1,2x steeds vaker voorkomen, raden we je aan meerdere formaten voor je iconen te bieden. Zo is je extensie ook toekomstbestendig tegen mogelijke wijzigingen in de weergavegrootte van iconen. Als je maar één formaat aanbiedt, kun je de sleutel "default_icon" ook instellen op een tekenreeks met het pad naar één icoon in plaats van een woordenboek.
Je kunt ook action.setIcon() aanroepen om het icoon van je extensie programmatisch in te stellen door een ander afbeeldingspad op te geven of een dynamisch gegenereerd icoon te leveren via het HTML-canvaselement of, als je dit instelt vanuit een extensie-serviceworker, de offscreen canvas API.
const canvas = new OffscreenCanvas(16, 16);
const context = canvas.getContext('2d');
context.clearRect(0, 0, 16, 16);
context.fillStyle = '#00FF00'; // Green
context.fillRect(0, 0, 16, 16);
const imageData = context.getImageData(0, 0, 16, 16);
browser.action.setIcon({imageData: imageData}, () => { /* ... */ });
Voor ingepakte extensies (geïnstalleerd vanuit een .crx-bestand) kunnen afbeeldingen de meeste indelingen hebben die de Blink-rendering-engine kan weergeven, waaronder png, jpeg, bmp en ico. Svg wordt niet ondersteund. Uitgepakte extensies moeten png-afbeeldingen gebruiken.
Tooltip (titel)
De tooltip of titel verschijnt als de gebruiker de cursor op het icoon van de extensie in de werkbalk houdt. De tekst is ook opgenomen in de toegankelijke tekst die door schermlezers wordt uitgesproken als de knop de focus krijgt.
De standaard tooltip wordt ingesteld met het veld "default_title" van de sleutel "action" in manifest.json.
U kunt dit ook programmatisch instellen door action.setTitle() aan te roepen.
Badge
Acties kunnen optioneel een badge tonen: een stukje tekst over het icoon. Hiermee kun je de actie updaten om een kleine hoeveelheid informatie over de status van de extensie te tonen, zoals een teller. De badge heeft een tekstcomponent en een achtergrondkleur. Omdat de ruimte beperkt is, raden we je aan badgetekst van maximaal 4 tekens te gebruiken.
Als je een badge wilt maken, stel je deze programmatisch in door action.setBadgeBackgroundColor() en action.setBadgeText() aan te roepen. Er is geen standaard badge-instelling in het manifest. De kleurwaarden van de badge kunnen een array zijn van 4 gehele getallen tussen 0 en 255 die de RGBA-kleur van de badge vormen, of een tekenreeks met een CSS-kleurwaarde.
browser.action.setBadgeBackgroundColor(
{color: [0, 255, 0, 0]}, // Green
() => { /* ... */ },
);
browser.action.setBadgeBackgroundColor(
{color: '#00FF00'}, // Also green
() => { /* ... */ },
);
browser.action.setBadgeBackgroundColor(
{color: 'green'}, // Also, also green
() => { /* ... */ },
);
Pop-up
De pop-up van een actie wordt getoond als de gebruiker op de actieknop van de extensie in de werkbalk klikt. De pop-up kan elke gewenste HTML-content bevatten en wordt automatisch aangepast aan de content. Het formaat van de pop-up moet tussen 25 x 25 en 800 x 600 pixels zijn.
De pop-up wordt in eerste instantie ingesteld door de property "default_popup" in de sleutel "action" in het bestand manifest.json. Als deze property aanwezig is, moet deze verwijzen naar een relatief pad in de extensiemap. Je kunt de methode action.setPopup() gebruiken om de relatieve paden dynamisch te updaten.
Toepassingen
Status per tabblad
Extensieacties kunnen voor elk tabblad verschillende statussen hebben. Als je een waarde voor een afzonderlijk tabblad wilt instellen, gebruik je de property tabId in de instellingsmethoden van de action API. Als je bijvoorbeeld de badgetekst voor een specifiek tabblad wilt instellen, doe je iets als dit:
function getTabId() { /* ... */}
function getTabBadge() { /* ... */}
browser.action.setBadgeText(
{
text: getTabBadge(tabId),
tabId: getTabId(),
},
() => { ... }
);
Als de property tabId wordt weggelaten, wordt de instelling behandeld als een algemene instelling. Tabbladspecifieke instellingen hebben voorrang op algemene instellingen.
Aangezette status
Standaard staan werkbalkacties aan (klikbaar) op elk tabblad. Je kunt deze standaardinstelling wijzigen door de property default_state in te stellen in de sleutel action van het manifest. Als
default_state is ingesteld op "disabled", staat de actie standaard uit en moet deze programmatisch worden aangezet om klikbaar te zijn. Als default_state is ingesteld op "enabled" (de standaardinstelling), staat de actie standaard aan en is deze klikbaar.
U kunt de status programmatisch beheren met de methoden action.enable() en action.disable(). Dit heeft alleen invloed op de vraag of de pop-up (indien aanwezig) of de gebeurtenis action.onClicked naar je extensie wordt gestuurd. Het heeft geen invloed op de aanwezigheid van de actie in de werkbalk.
Voorbeelden
In de volgende voorbeelden zie je een aantal veelvoorkomende manieren waarop acties in extensies worden gebruikt. Als je deze API wilt proberen, installeer je het voorbeeld van de Action API uit de repository chrome-extension-samples.
Een pop-up tonen
Het is gebruikelijk dat een extensie een pop-up toont als de gebruiker op de actie van de extensie klikt. Als je dit in je eigen extensie wilt implementeren, declareer je de pop-up in je manifest.json en geef je de content aan die Chrome in de pop-up moet tonen.
// manifest.json
{
"name": "Action popup demo",
"version": "1.0",
"manifest_version": 3,
"action": {
"default_title": "Click to view a popup",
"default_popup": "popup.html"
}
}
<!-- popup.html -->
<!DOCTYPE html>
<html>
<head>
<style>
html {
min-height: 5em;
min-width: 10em;
background: salmon;
}
</style>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
Een contentscript injecteren bij een klik
Een veelvoorkomend patroon voor extensies is om hun primaire functie beschikbaar te maken via de actie van de extensie. In het volgende voorbeeld wordt dit patroon getoond. Als de gebruiker op de actie klikt, injecteert de extensie een contentscript in de huidige pagina. Het contentscript toont dan een melding om te verifiëren dat alles werkt zoals verwacht.
// manifest.json
{
"name": "Action script injection demo",
"version": "1.0",
"manifest_version": 3,
"action": {
"default_title": "Click to show an alert"
},
"permissions": ["activeTab", "scripting"],
"background": {
"service_worker": "background.js"
}
}
// background.js
browser.action.onClicked.addListener((tab) => {
browser.scripting.executeScript({
target: {tabId: tab.id},
files: ['content.js']
});
});
// content.js
alert('Hello, world!');
Acties emuleren met declarativeContent
In dit voorbeeld zie je hoe de achtergrondlogica van een extensie (a) een actie standaard kan uitzetten en (b) declarativeContent kan gebruiken om de actie op specifieke sites aan te zetten.
// service-worker.js
// Wrap in an onInstalled callback to avoid unnecessary work
// every time the service worker is run
browser.runtime.onInstalled.addListener(() => {
// Page actions are disabled by default and enabled on select tabs
browser.action.disable();
// Clear all rules to ensure only our expected rules are set
browser.declarativeContent.onPageChanged.removeRules(undefined, () => {
// Declare a rule to enable the action on example.com pages
let exampleRule = {
conditions: [
new browser.declarativeContent.PageStateMatcher({
pageUrl: {hostSuffix: '.example.com'},
})
],
actions: [new browser.declarativeContent.ShowAction()],
};
// Finally, apply our new array of rules
let rules = [exampleRule];
browser.declarativeContent.onPageChanged.addRules(rules);
});
});
Typen
OpenPopupOptions
Eigenschappen
-
windowId
number optioneel
De ID van het venster waarin de actiepop-up moet worden geopend. De standaardwaarde is het momenteel actieve venster als er geen waarde is ingevoerd.
TabDetails
Eigenschappen
-
tabId
number optioneel
De ID van het tabblad waarvoor je de status wilt opvragen. Als er geen tabblad is opgegeven, wordt de niet-tabbladspecifieke status geretourneerd.
UserSettings
De verzameling door de gebruiker ingevoerde instellingen voor de actie van een extensie.
Eigenschappen
-
isOnToolbar
booleaans
Of het actie-icoon van de extensie zichtbaar is op de werkbalk op het hoogste niveau van browservensters (dat wil zeggen of de extensie is vastgezet door de gebruiker).
UserSettingsChange
Eigenschappen
-
isOnToolbar
booleaans optioneel
Of het actie-icoon van de extensie zichtbaar is op de werkbalk op het hoogste niveau van browservensters (dat wil zeggen of de extensie is vastgezet door de gebruiker).
Methoden
disable()
browser.action.disable(
tabId?: number,
): Promise<void>
Zet de actie voor een tabblad uit.
Parameters
-
tabId
number optioneel
De ID van het tabblad waarvoor je de actie wilt aanpassen.
Retourzendingen
-
Promise<void>
enable()
browser.action.enable(
tabId?: number,
): Promise<void>
Zet de actie voor een tabblad aan. Acties staan standaard aan.
Parameters
-
tabId
number optioneel
De ID van het tabblad waarvoor je de actie wilt aanpassen.
Retourzendingen
-
Promise<void>
getBadgeBackgroundColor()
browser.action.getBadgeBackgroundColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Haalt de achtergrondkleur van de actie op.
Parameters
-
details
Retourzendingen
-
Promise<extensionTypes.ColorArray>
getBadgeText()
browser.action.getBadgeText(
details: TabDetails,
): Promise<string>
Haalt de badgetekst van de actie op. Als er geen tabblad is opgegeven, wordt de niet-tabbladspecifieke badgetekst geretourneerd. Als displayActionCountAsBadgeText aanstaat, wordt er een tijdelijke aanduidingstekst geretourneerd, tenzij het recht declarativeNetRequestFeedback aanwezig is of er tabbladspecifieke badgetekst is verstrekt.
Parameters
-
details
Retourzendingen
-
Promise<string>
getBadgeTextColor()
browser.action.getBadgeTextColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Haalt de tekstkleur van de actie op.
Parameters
-
details
Retourzendingen
-
Promise<extensionTypes.ColorArray>
getPopup()
browser.action.getPopup(
details: TabDetails,
): Promise<string>
Haalt het HTML-document op dat is ingesteld als de pop-up voor deze actie.
Parameters
-
details
Retourzendingen
-
Promise<string>
getTitle()
browser.action.getTitle(
details: TabDetails,
): Promise<string>
Haalt de titel van de actie op.
Parameters
-
details
Retourzendingen
-
Promise<string>
getUserSettings()
browser.action.getUserSettings(): Promise<UserSettings>
Retourneert de door de gebruiker ingevoerde instellingen voor de actie van een extensie.
Retourzendingen
-
Promise<UserSettings>
isEnabled()
browser.action.isEnabled(
tabId?: number,
): Promise<boolean>
Geeft aan of de extensieactie aanstaat voor een tabblad (of wereldwijd als er geen tabId is verstrekt). Acties die alleen met declarativeContent zijn aangezet, retourneren altijd onwaar.
Parameters
-
tabId
number optioneel
De ID van het tabblad waarvoor je de aangezette status wilt controleren.
Retourzendingen
-
Promise<boolean>
openPopup()
browser.action.openPopup(
options?: OpenPopupOptions,
): Promise<void>
Opent de pop-up van de extensie. Tussen Chrome 118 en Chrome 126 is dit alleen beschikbaar voor extensies die via beleid zijn geïnstalleerd.
Parameters
-
opties
OpenPopupOptions optioneel
Hiermee geef je opties op om de pop-up te openen.
Retourzendingen
-
Promise<void>
setBadgeBackgroundColor()
browser.action.setBadgeBackgroundColor(
details: object,
): Promise<void>
Hiermee stelt u de achtergrondkleur van de badge in.
Parameters
-
details
object
-
kleur
string | ColorArray
Een matrix van 4 gehele getallen in het bereik [0,255] die de RGBA-kleur van de badge vormen. Ondoorzichtig rood is bijvoorbeeld
[255, 0, 0, 255]. Kan ook een tekenreeks met een CSS-waarde zijn, waarbij ondoorzichtig rood#FF0000of#F00is. -
tabId
number optioneel
Beperkt de wijziging tot wanneer een bepaald tabblad is geselecteerd. Wordt automatisch gereset als het tabblad wordt gesloten.
-
Retourzendingen
-
Promise<void>
setBadgeText()
browser.action.setBadgeText(
details: object,
): Promise<void>
Stelt de badgetekst voor de actie in. De badge wordt boven het icoon getoond.
Parameters
-
details
object
-
tabId
number optioneel
Beperkt de wijziging tot wanneer een bepaald tabblad is geselecteerd. Wordt automatisch gereset als het tabblad wordt gesloten.
-
tekst
tekenreeks optioneel
U kunt een onbeperkt aantal tekens doorgeven, maar er passen er maar ongeveer 4 in de ruimte. Als er een lege tekenreeks (
'') wordt doorgegeven, wordt de badgetekst gewist. AlstabIdis ingevoerd entextis null, wordt de tekst voor het ingevoerde tabblad gewist en wordt de algemene badgetekst gebruikt.
-
Retourzendingen
-
Promise<void>
setBadgeTextColor()
browser.action.setBadgeTextColor(
details: object,
): Promise<void>
Stelt de tekstkleur voor de badge in.
Parameters
-
details
object
-
kleur
string | ColorArray
Een matrix van 4 gehele getallen in het bereik [0,255] die de RGBA-kleur van de badge vormen. Ondoorzichtig rood is bijvoorbeeld
[255, 0, 0, 255]. Kan ook een tekenreeks met een CSS-waarde zijn, waarbij ondoorzichtig rood#FF0000of#F00is. Als je deze waarde niet instelt, wordt er automatisch een kleur gekozen die contrasteert met de achtergrondkleur van de badge, zodat de tekst zichtbaar is. Kleuren met alfawaarden die gelijk zijn aan 0, worden niet ingesteld en retourneren een fout. -
tabId
number optioneel
Beperkt de wijziging tot wanneer een bepaald tabblad is geselecteerd. Wordt automatisch gereset als het tabblad wordt gesloten.
-
Retourzendingen
-
Promise<void>
setIcon()
browser.action.setIcon(
details: object,
): Promise<void>
Stelt het icoon voor de actie in. Het icoon kan worden gespecificeerd als het pad naar een afbeeldingsbestand of als de pixelgegevens van een canvaselement, of als woordenboek van een van beide. De property path of imageData moet worden opgegeven.
Parameters
-
details
object
-
imageData
ImageData | object optioneel
Een ImageData-object of een woordenboek {size -> ImageData} dat het icoon vertegenwoordigt dat moet worden ingesteld. Als het icoon is gespecificeerd als een woordenboek, wordt de daadwerkelijke afbeelding die wordt gebruikt, gekozen op basis van de pixeldichtheid van het scherm. Als het aantal afbeeldingspixels dat in één schermruimte-eenheid past gelijk is aan
scale, wordt de afbeelding met de groottescale* n geselecteerd, waarbij n de grootte van het icoon in de UI is. Er moet minstens één afbeelding worden ingevoerd. Let op: 'details.imageData = foo' is gelijk aan 'details.imageData = {'16': foo}' -
pad
string | object optioneel
Een relatief afbeeldingspad of een woordenboek {size -> relative image path} dat verwijst naar het icoon dat moet worden ingesteld. Als het icoon is gespecificeerd als een woordenboek, wordt de daadwerkelijke afbeelding die wordt gebruikt, gekozen op basis van de pixeldichtheid van het scherm. Als het aantal afbeeldingspixels dat in één schermruimte-eenheid past gelijk is aan
scale, wordt de afbeelding met de groottescale* n geselecteerd, waarbij n de grootte van het icoon in de UI is. Er moet minstens één afbeelding worden ingevoerd. 'details.path = foo' is gelijk aan 'details.path = {'16': foo}' -
tabId
number optioneel
Beperkt de wijziging tot wanneer een bepaald tabblad is geselecteerd. Wordt automatisch gereset als het tabblad wordt gesloten.
-
Retourzendingen
-
Promise<void>
Chrome 96+ browser.* sinds Chrome 148
setPopup()
browser.action.setPopup(
details: object,
): Promise<void>
Stelt in dat het HTML-document wordt geopend als pop-up wanneer de gebruiker op het icoon van de actie klikt.
Parameters
-
details
object
-
pop-up
tekenreeks
Het relatieve pad naar het HTML-bestand dat in een pop-up moet worden getoond. Als je dit beleid instelt op de lege tekenreeks (
''), wordt er geen pop-up getoond. -
tabId
number optioneel
Beperkt de wijziging tot wanneer een bepaald tabblad is geselecteerd. Wordt automatisch gereset als het tabblad wordt gesloten.
-
Retourzendingen
-
Promise<void>
setTitle()
browser.action.setTitle(
details: object,
): Promise<void>
Hiermee wordt de titel van de actie ingesteld. Dit wordt getoond in de tooltip.
Parameters
-
details
object
-
tabId
number optioneel
Beperkt de wijziging tot wanneer een bepaald tabblad is geselecteerd. Wordt automatisch gereset als het tabblad wordt gesloten.
-
titel
tekenreeks
De tekenreeks die de actie moet tonen als de muisaanwijzer erop wordt geplaatst.
-
Retourzendingen
-
Promise<void>
Evenementen
onClicked
browser.action.onClicked.addListener(
callback: function,
)
Wordt geactiveerd als er op een actie-icoon wordt geklikt. Deze gebeurtenis wordt niet geactiveerd als de actie een pop-up heeft.
Parameters
-
callback
functie
De parameter
callbackziet er zo uit:(tab: tabs.Tab) => void
-
tab
-
onUserSettingsChanged
browser.action.onUserSettingsChanged.addListener(
callback: function,
)
Wordt geactiveerd als door de gebruiker ingevoerde instellingen voor de actie van een extensie worden gewijzigd.
Parameters
-
callback
functie
De parameter
callbackziet er zo uit:(change: UserSettingsChange) => void
-
wijzigen
-