Beschrijving
Gebruik de chrome.action API om het pictogram van de extensie in de Google Chrome-werkbalk te beheren.
Beschikbaarheid
Manifest
De volgende sleutels moeten in het manifest worden gedeclareerd om deze API te kunnen gebruiken.
"action" Om de browser.action API te gebruiken, moet u een "manifest_version" van 3 opgeven en de sleutel "action" in uw manifestbestand opnemen.
{
"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 bijbehorende subsleutels) is optioneel. Als deze niet is opgenomen, wordt uw extensie nog steeds in de werkbalk weergegeven om toegang te bieden tot het menu van de extensie. Daarom raden we aan om altijd ten minste de sleutels "action" en "default_icon" op te nemen.
Concepten en gebruik
Onderdelen van de gebruikersinterface
Icon
Het pictogram is de hoofdafbeelding op de werkbalk van uw extensie en wordt ingesteld door de sleutel "default_icon" in de sleutel "action" van uw manifest. Pictogrammen moeten 16 apparaatonafhankelijke pixels (DIP's) breed en hoog zijn.
De sleutel "default_icon" is een woordenboek met formaten en bijbehorende afbeeldingspaden. Chrome gebruikt deze pictogrammen om te bepalen welke afbeeldingsschaal moet worden gebruikt. Als er geen exacte overeenkomst wordt gevonden, selecteert Chrome het dichtstbijzijnde beschikbare pictogram en schaalt dit om de afbeelding te passen, wat de beeldkwaliteit kan beïnvloeden.
Omdat apparaten met minder gangbare schaalfactoren zoals 1,5x of 1,2x steeds vaker voorkomen, raden we u aan om meerdere formaten voor uw pictogrammen op te geven. Dit maakt uw extensie ook toekomstbestendig tegen mogelijke wijzigingen in de weergavegrootte van pictogrammen. Als u echter slechts één formaat opgeeft, kan de sleutel "default_icon" ook worden ingesteld op een tekenreeks met het pad naar een enkel pictogram in plaats van een woordenboek.
Je kunt ook action.setIcon() aanroepen om het pictogram van je extensie programmatisch in te stellen door een ander afbeeldingspad op te geven of een dynamisch gegenereerd pictogram te leveren met behulp van het HTML-canvas-element , of, als je het instelt vanuit een extension service worker, 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 gecomprimeerde extensies (geïnstalleerd vanuit een .crx-bestand) kunnen afbeeldingen in de meeste formaten zijn die de Blink-renderingengine kan weergeven, waaronder PNG, JPEG, BMP, ICO en andere. SVG wordt niet ondersteund. Niet-gecomprimeerde extensies moeten PNG-afbeeldingen gebruiken.
Tooltip (titel)
De tooltip, ofwel de titel, verschijnt wanneer de gebruiker de muiswijzer boven het pictogram van de extensie in de werkbalk houdt. Deze is ook opgenomen in de toegankelijke tekst die door schermlezers wordt voorgelezen wanneer de knop de focus krijgt.
De standaard tooltip wordt ingesteld met behulp van het veld "default_title" van de sleutel "action" in manifest.json . Je kunt deze ook programmatisch instellen door action.setTitle() aan te roepen.
Badge
Acties kunnen optioneel een 'badge' weergeven — een stukje tekst dat over het pictogram heen wordt geplaatst. Hiermee kunt u de actie bijwerken om een kleine hoeveelheid informatie over de status van de extensie weer te geven, zoals een teller. De badge heeft een tekstcomponent en een achtergrondkleur. Omdat de ruimte beperkt is, raden we aan dat de badge-tekst maximaal vier tekens bevat.
Om een badge te maken, stel je deze programmatisch in door action.setBadgeBackgroundColor() en action.setBadgeText() aan te roepen. Er is geen standaard badge-instelling in het manifest. Badgekleurwaarden kunnen een array van vier gehele getallen tussen 0 en 255 zijn 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
Een pop-upvenster voor een actie wordt weergegeven wanneer de gebruiker op de actieknop van de extensie in de werkbalk klikt. Het pop-upvenster kan willekeurige HTML-inhoud bevatten en wordt automatisch aangepast aan de inhoud. De afmetingen van het pop-upvenster moeten tussen 25x25 en 800x600 pixels liggen.
De pop-up wordt in eerste instantie ingesteld door de eigenschap "default_popup" in de sleutel "action" in het manifest.json bestand. Indien aanwezig, moet deze eigenschap verwijzen naar een relatief pad binnen de extensiemap. Deze kan ook dynamisch worden bijgewerkt naar een ander relatief pad met behulp van de methode action.setPopup() .
Gebruiksvoorbeelden
Status per tabblad
Extensie-acties kunnen verschillende statussen hebben voor elk tabblad. Om een waarde voor een individueel tabblad in te stellen, gebruikt u de eigenschap tabId in de instellingsmethoden van de action API. Om bijvoorbeeld de badge-tekst voor een specifiek tabblad in te stellen, doet u iets als het volgende:
function getTabId() { /* ... */}
function getTabBadge() { /* ... */}
browser.action.setBadgeText(
{
text: getTabBadge(tabId),
tabId: getTabId(),
},
() => { ... }
);
Als de eigenschap tabId wordt weggelaten, wordt de instelling als een algemene instelling beschouwd. Tabbladspecifieke instellingen hebben voorrang op algemene instellingen.
Ingeschakelde status
Standaard zijn de acties in de werkbalk op elk tabblad ingeschakeld (klikbaar). U kunt deze standaardinstelling wijzigen door de eigenschap default_state in de ` action sleutel van het manifest in te stellen. Als default_state is ingesteld op "disabled" , is de actie standaard uitgeschakeld en moet deze programmatisch worden ingeschakeld om klikbaar te zijn. Als default_state is ingesteld op "enabled" (de standaardwaarde), is de actie standaard ingeschakeld en klikbaar.
Je kunt de status programmatisch beheren met de methoden action.enable() en action.disable() . Dit heeft alleen invloed op het al dan niet verzenden van de pop-up (indien aanwezig) of action.onClicked -gebeurtenis naar je extensie; het heeft geen invloed op de aanwezigheid van de actie in de toolbar.
Voorbeelden
De volgende voorbeelden laten enkele veelvoorkomende manieren zien waarop acties in extensies worden gebruikt. Om deze API uit te proberen, installeer je het Action API-voorbeeld uit de chrome-extension-samples- repository.
Toon een pop-upvenster
Het is gebruikelijk dat een extensie een pop-upvenster weergeeft wanneer de gebruiker op een actie van de extensie klikt. Om dit in je eigen extensie te implementeren, declareer je de pop-up in je manifest.json en geef je aan welke inhoud Chrome in de pop-up moet weergeven.
// 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>
Voeg een contentscript in bij een klik.
Een veelvoorkomend patroon voor extensies is om hun belangrijkste functionaliteit te tonen via de actie van de extensie. Het volgende voorbeeld illustreert dit patroon. Wanneer de gebruiker op de actie klikt, voegt de extensie een contentscript toe aan de huidige pagina. Dit contentscript geeft vervolgens een melding weer om te controleren of alles naar behoren werkt.
// 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!');
Emuleer acties met declarativeContent.
Dit voorbeeld laat zien hoe de achtergrondlogica van een extensie (a) een actie standaard kan uitschakelen en (b) declarativeContent kan gebruiken om de actie op specifieke sites in te schakelen.
// 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);
});
});
Soorten
OpenPopupOptions
Eigenschappen
- venster-ID
nummer optioneel
De ID van het venster waarin de actiepop-up moet worden geopend. Standaard wordt het momenteel actieve venster gebruikt als er geen ID is opgegeven.
TabDetails
Eigenschappen
- tabId
nummer optioneel
De ID van het tabblad waarvan de status moet worden opgevraagd. Als er geen tabblad is opgegeven, wordt de niet-tabbladspecifieke status geretourneerd.
UserSettings
De verzameling door de gebruiker opgegeven instellingen met betrekking tot de werking van een extensie.
Eigenschappen
- isOnToolbar
booleaans
Of het actie-icoon van de extensie zichtbaar is in de hoofdwerkbalk van het browservenster (oftewel, of de extensie door de gebruiker is 'vastgezet').
UserSettingsChange
Eigenschappen
- isOnToolbar
boolean optioneel
Of het actie-icoon van de extensie zichtbaar is in de hoofdwerkbalk van het browservenster (oftewel, of de extensie door de gebruiker is 'vastgezet').
Methoden
disable()
chrome.action.disable(
tabId?: number,
): Promise<void>
Schakelt de actie voor een tabblad uit.
Parameters
- tabId
nummer optioneel
De ID van het tabblad waarvoor u de actie wilt wijzigen.
Retourneert
Promise<void>
enable()
chrome.action.enable(
tabId?: number,
): Promise<void>
Hiermee wordt de actie voor een tabblad ingeschakeld. Acties zijn standaard ingeschakeld.
Parameters
- tabId
nummer optioneel
De ID van het tabblad waarvoor u de actie wilt wijzigen.
Retourneert
Promise<void>
getBadgeBackgroundColor()
chrome.action.getBadgeBackgroundColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Haalt de achtergrondkleur van de actie op.
Parameters
- details
Retourneert
Promise< extensionTypes.ColorArray >
getBadgeText()
chrome.action.getBadgeText(
details: TabDetails,
): Promise<string>
Haalt de badge-tekst van de actie op. Als er geen tabblad is opgegeven, wordt de niet-tabbladspecifieke badge-tekst geretourneerd. Als displayActionCountAsBadgeText is ingeschakeld, wordt een placeholder-tekst geretourneerd, tenzij de machtiging declarativeNetRequestFeedback aanwezig is of er tabbladspecifieke badge-tekst is opgegeven.
Parameters
- details
Retourneert
Belofte<string>
getBadgeTextColor()
chrome.action.getBadgeTextColor(
details: TabDetails,
): Promise<extensionTypes.ColorArray>
Geeft de tekstkleur van de actie weer.
Parameters
- details
Retourneert
Promise< extensionTypes.ColorArray >
getPopup()
chrome.action.getPopup(
details: TabDetails,
): Promise<string>
Hiermee wordt het HTML-document opgehaald dat als pop-up voor deze actie is ingesteld.
Parameters
- details
Retourneert
Belofte<string>
getTitle()
chrome.action.getTitle(
details: TabDetails,
): Promise<string>
Krijgt de titel van de actie.
Parameters
- details
Retourneert
Belofte<string>
getUserSettings()
chrome.action.getUserSettings(): Promise<UserSettings>
Geeft de door de gebruiker opgegeven instellingen weer met betrekking tot de actie van een extensie.
Retourneert
Promise< Gebruikersinstellingen >
isEnabled()
chrome.action.isEnabled(
tabId?: number,
): Promise<boolean>
Geeft aan of de extensieactie is ingeschakeld voor een tabblad (of globaal als er geen tabId is opgegeven). Acties die alleen met declarativeContent zijn ingeschakeld, retourneren altijd false.
Parameters
- tabId
nummer optioneel
De ID van het tabblad waarvan u de inschakelstatus wilt controleren.
Retourneert
Belofte<boolean>
openPopup()
chrome.action.openPopup(
options?: OpenPopupOptions,
): Promise<void>
Opent het pop-upvenster van de extensie. Tussen Chrome 118 en Chrome 126 is dit alleen beschikbaar voor extensies die via een beleidsregel zijn geïnstalleerd.
Parameters
- opties
OpenPopupOptions optioneel
Hiermee kunt u de opties voor het openen van de pop-up specificeren.
Retourneert
Promise<void>
setBadgeBackgroundColor()
chrome.action.setBadgeBackgroundColor(
details: object,
): Promise<void>
Hiermee wordt de achtergrondkleur voor de badge ingesteld.
Parameters
- details
voorwerp
- kleur
tekenreeks | Kleurenarray
Een array van vier gehele getallen in het bereik [0,255] die de RGBA-kleur van de badge vormen. Dekkend rood is bijvoorbeeld
[255, 0, 0, 255]. Het kan ook een tekenreeks zijn met een CSS-waarde, waarbij dekkend rood#FF0000of#F00is. - tabId
nummer optioneel
De wijziging is beperkt tot het moment dat een specifiek tabblad is geselecteerd. De instelling wordt automatisch gereset wanneer het tabblad wordt gesloten.
Retourneert
Promise<void>
setBadgeText()
chrome.action.setBadgeText(
details: object,
): Promise<void>
Hiermee wordt de badge-tekst voor de actie ingesteld. De badge wordt boven het pictogram weergegeven.
Parameters
- details
voorwerp
- tabId
nummer optioneel
De wijziging is beperkt tot het moment dat een specifiek tabblad is geselecteerd. De instelling wordt automatisch gereset wanneer het tabblad wordt gesloten.
- tekst
string optioneel
Er kunnen meerdere tekens worden doorgegeven, maar er passen er slechts ongeveer vier in de beschikbare ruimte. Als een lege tekenreeks (
'') wordt doorgegeven, wordt de badge-tekst gewist. AlstabIdis opgegeven entextnull is, wordt de tekst voor het opgegeven tabblad gewist en wordt de standaard badge-tekst gebruikt.
Retourneert
Promise<void>
setBadgeTextColor()
chrome.action.setBadgeTextColor(
details: object,
): Promise<void>
Hiermee stelt u de tekstkleur voor de badge in.
Parameters
- details
voorwerp
- kleur
tekenreeks | Kleurenarray
Een array van vier gehele getallen in het bereik [0,255] die de RGBA-kleur van de badge vormen. Dekkend rood is bijvoorbeeld
[255, 0, 0, 255]. Het kan ook een tekenreeks zijn met een CSS-waarde, waarbij dekkend rood#FF0000of#F00is. Als deze waarde niet wordt ingesteld, wordt automatisch een kleur gekozen die contrasteert met de achtergrondkleur van de badge, zodat de tekst zichtbaar blijft. Kleuren met een alfawaarde gelijk aan 0 worden niet ingesteld en geven een foutmelding. - tabId
nummer optioneel
De wijziging is beperkt tot het moment dat een specifiek tabblad is geselecteerd. De instelling wordt automatisch gereset wanneer het tabblad wordt gesloten.
Retourneert
Promise<void>
setIcon()
chrome.action.setIcon(
details: object,
): Promise<void>
Hiermee wordt het pictogram voor de actie ingesteld. Het pictogram kan worden opgegeven als het pad naar een afbeeldingsbestand, als de pixelgegevens van een canvas-element, of als een woordenboek met een van beide. Ofwel het pad , ofwel de eigenschap imageData moet worden opgegeven.
Parameters
- details
voorwerp
- beeldgegevens
ImageData | object optioneel
Ofwel een ImageData-object, ofwel een dictionary {size -> ImageData} die het in te stellen pictogram vertegenwoordigt. Als het pictogram als een dictionary wordt opgegeven, wordt de daadwerkelijke afbeelding gekozen op basis van de pixeldichtheid van het scherm. Als het aantal afbeeldingspixels dat in één schermruimte-eenheid past gelijk is aan
scale, wordt een afbeelding met de groottescale* n geselecteerd, waarbij n de grootte van het pictogram in de gebruikersinterface is. Er moet minimaal één afbeelding worden opgegeven. Merk op dat 'details.imageData = foo' gelijk is aan 'details.imageData = {'16': foo}'. - pad
tekenreeks | object optioneel
Ofwel een relatief afbeeldingspad, ofwel een dictionary {grootte -> relatief afbeeldingspad} die verwijst naar het in te stellen pictogram. Als het pictogram als een dictionary wordt opgegeven, wordt de daadwerkelijke afbeelding gekozen op basis van de pixeldichtheid van het scherm. Als het aantal afbeeldingspixels dat in één schermruimte-eenheid past gelijk is
scale, wordt een afbeelding met groottescale* n geselecteerd, waarbij n de grootte van het pictogram in de gebruikersinterface is. Er moet minimaal één afbeelding worden opgegeven. Merk op dat 'details.path = foo' gelijk is aan 'details.path = {'16': foo}'. - tabId
nummer optioneel
De wijziging is beperkt tot het moment dat een specifiek tabblad is geselecteerd. De instelling wordt automatisch gereset wanneer het tabblad wordt gesloten.
Retourneert
Promise<void>
Chrome 96+
setPopup()
chrome.action.setPopup(
details: object,
): Promise<void>
Hiermee wordt ingesteld dat het HTML-document als pop-up wordt geopend wanneer de gebruiker op het actie-icoon klikt.
Parameters
- details
voorwerp
- pop-up
snaar
Het relatieve pad naar het HTML-bestand dat in een pop-up moet worden weergegeven. Indien ingesteld op een lege tekenreeks (
''), wordt er geen pop-up weergegeven. - tabId
nummer optioneel
De wijziging is beperkt tot het moment dat een specifiek tabblad is geselecteerd. De instelling wordt automatisch gereset wanneer het tabblad wordt gesloten.
Retourneert
Promise<void>
setTitle()
chrome.action.setTitle(
details: object,
): Promise<void>
Hiermee wordt de titel van de actie ingesteld. Deze wordt weergegeven in de tooltip.
Parameters
- details
voorwerp
- tabId
nummer optioneel
De wijziging is beperkt tot het moment dat een specifiek tabblad is geselecteerd. De instelling wordt automatisch gereset wanneer het tabblad wordt gesloten.
- titel
snaar
De tekst die de actie moet weergeven wanneer de muis eroverheen beweegt.
Retourneert
Promise<void>
Evenementen
onClicked
chrome.action.onClicked.addListener(
callback: function,
)
Deze gebeurtenis wordt geactiveerd wanneer op een actie-icoon wordt geklikt. Deze gebeurtenis wordt niet geactiveerd als de actie een pop-upvenster bevat.
Parameters
- terugbelverzoek
functie
De
callbackparameter ziet er als volgt uit:(tab: tabs.Tab) => void
- tab
onUserSettingsChanged
chrome.action.onUserSettingsChanged.addListener(
callback: function,
)
Wordt geactiveerd wanneer door de gebruiker opgegeven instellingen met betrekking tot de actie van een extensie wijzigen.
Parameters
- terugbelverzoek
functie
De
callbackparameter ziet er als volgt uit:(change: UserSettingsChange) => void
- wijziging