En omfattande guide till utveckling av webblÀsartillÀgg med Manifest V3, som tÀcker viktiga JavaScript-API:er, migreringsstrategier och bÀsta praxis.
Utveckling av webblÀsartillÀgg: Navigera i Manifest V3 och JavaScript-API:er
WebblÀsartillÀgg erbjuder ett kraftfullt sÀtt att förbÀttra och anpassa webbupplevelsen. De lÄter utvecklare lÀgga till funktionalitet i webblÀsare, interagera med webbsidor och integrera med webbtjÀnster. Denna guide ger en omfattande översikt över utveckling av webblÀsartillÀgg, med fokus pÄ Manifest V3 och de centrala JavaScript-API:er som driver dessa tillÀgg.
FörstÄelse för webblÀsartillÀgg
Ett webblÀsartillÀgg Àr ett litet program som utökar funktionaliteten i en webblÀsare. TillÀgg kan modifiera webbsidor, lÀgga till nya funktioner och integrera med externa tjÀnster. De Àr vanligtvis skrivna i JavaScript, HTML och CSS, och paketeras som en ZIP-fil med en manifestfil som beskriver tillÀggets metadata och behörigheter.
PopulÀra anvÀndningsomrÄden för webblÀsartillÀgg inkluderar:
- Annonsblockerare: Ta bort annonser frÄn webbsidor.
- Lösenordshanterare: Spara och hantera lösenord sÀkert.
- Produktivitetsverktyg: FörbÀttra arbetsflödet med funktioner som uppgiftshantering och anteckningar.
- InnehĂ„llsanpassning: Ăndra utseendet och beteendet pĂ„ webbsidor.
- TillgÀnglighetsverktyg: FörbÀttra webbtillgÀngligheten för anvÀndare med funktionsnedsÀttningar.
Manifest V3: Den nya standarden
Manifest V3 Àr den senaste versionen av manifestfilen för webblÀsartillÀgg, en JSON-fil som beskriver tillÀggets metadata, behörigheter och resurser. Den introducerar betydande förÀndringar i utvecklingsprocessen för tillÀgg, frÀmst med fokus pÄ förbÀttrad sÀkerhet, integritet och prestanda. Viktiga Àndringar i Manifest V3 inkluderar:
- Service Workers: ErsÀtter bakgrundssidor med service workers för förbÀttrad prestanda och minskad minnesanvÀndning. Service workers Àr hÀndelsedrivna skript som körs i bakgrunden och hanterar hÀndelser som nÀtverksförfrÄgningar och larm.
- Declarative Net Request API: ErsÀtter det blockerande webRequest API:et med Declarative Net Request API för att filtrera nÀtverksförfrÄgningar. Detta förbÀttrar integritet och sÀkerhet genom att begrÀnsa tillÀggets Ätkomst till nÀtverkstrafik.
- Content Security Policy (CSP): Tvingar fram striktare CSP-policyer för att förhindra exekvering av godtycklig kod och minska sÀkerhetsrisker.
- Manifestversion: Nyckeln manifest_version i filen manifest.json mÄste vara satt till 3.
Migrera frÄn Manifest V2 till Manifest V3
Att migrera frÄn Manifest V2 till Manifest V3 krÀver noggrann planering och kodÀndringar. HÀr Àr en steg-för-steg-guide:
- Uppdatera manifestfilen: SĂ€tt
manifest_versiontill 3 och uppdatera fÀltenpermissionsochbackgroundför att följa kraven i Manifest V3. - ErsÀtt bakgrundssidor med service workers: Skriv om bakgrundsskript som service workers och hantera hÀndelser med
chrome.scriptingochchrome.alarmsAPI:erna. - Migrera till Declarative Net Request API: ErsÀtt blockerande anrop till
webRequestAPI med deklarativa regler definierade ideclarativeNetRequestAPI:et. - Uppdatera content security policy: Justera fÀltet
content_security_policyi manifestfilen för att följa striktare CSP-krav. - Testa noggrant: Testa tillÀgget utförligt i olika webblÀsare för att sÀkerstÀlla kompatibilitet och korrekt funktionalitet.
Exempel: Migrera ett bakgrundsskript till en Service Worker
Manifest V2 (background.js):
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
return {cancel: true};
},
{urls: ["*.example.com/*"]},
["blocking"]
);
Manifest V3 (service-worker.js):
chrome.declarativeNetRequest.updateDynamicRules({
removeRuleIds: [1],
addRules: [{
"id": 1,
"priority": 1,
"action": { "type": "block" },
"condition": { "urlFilter": "*.example.com/*", "resourceTypes": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"] }
}]
});
manifest.json (Manifest V3):
{
"manifest_version": 3,
"name": "My Extension",
"version": "1.0",
"description": "A simple extension",
"permissions": [
"declarativeNetRequest",
"declarativeNetRequestFeedback",
"storage"
],
"background": {
"service_worker": "service-worker.js"
},
"declarative_net_request": {
"rule_resources": [{
"id": "ruleset_1",
"enabled": true,
"path": "rules.json"
}]
}
}
Viktiga JavaScript-API:er för webblÀsartillÀgg
WebblÀsartillÀgg förlitar sig pÄ en uppsÀttning JavaScript-API:er för att interagera med webblÀsaren och webbsidor. HÀr Àr nÄgra av de viktigaste API:erna:
1. chrome.runtime
chrome.runtime API:et ger tillgÄng till tillÀggets körtidsmiljö. Det lÄter tillÀgg kommunicera med bakgrundsskriptet, komma Ät manifestfilen och hantera tillÀggets livscykel.
Viktiga metoder:
chrome.runtime.sendMessage(): Skickar ett meddelande till bakgrundsskriptet eller andra tillÀgg.chrome.runtime.onMessage.addListener(): Lyssnar efter meddelanden frÄn andra skript.chrome.runtime.getManifest(): Returnerar tillÀggets manifestfil som ett JavaScript-objekt.chrome.runtime.reload(): Laddar om tillÀgget.
Exempel: Skicka ett meddelande frÄn ett innehÄllsskript till ett bakgrundsskript
InnehÄllsskript (content.js):
chrome.runtime.sendMessage({message: "Hej frÄn innehÄllsskriptet!"}, function(response) {
console.log("Svar frÄn bakgrundsskript: ", response.message);
});
Bakgrundsskript (service-worker.js):
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log("Meddelande frÄn innehÄllsskript: ", request.message);
sendResponse({message: "Hej frÄn bakgrundsskriptet!"});
}
);
2. chrome.storage
chrome.storage API:et erbjuder en mekanism för att lagra och hÀmta data inom tillÀgget. Det erbjuder bÄde lokala och synkroniserade lagringsalternativ.
Viktiga metoder:
chrome.storage.local.set(): Lagrar data lokalt.chrome.storage.local.get(): HÀmtar data frÄn lokal lagring.chrome.storage.sync.set(): Lagrar data som synkroniseras över anvÀndarens enheter.chrome.storage.sync.get(): HÀmtar data frÄn synkroniserad lagring.
Exempel: Lagra och hÀmta data i lokal lagring
// Lagra data
chrome.storage.local.set({key: "value"}, function() {
console.log("VÀrdet Àr satt till " + "value");
});
// HĂ€mta data
chrome.storage.local.get(["key"], function(result) {
console.log("VÀrdet Àr för nÀrvarande " + result.key);
});
3. chrome.tabs
chrome.tabs API:et lÄter tillÀgg interagera med webblÀsarflikar. Det erbjuder metoder för att skapa, frÄga efter, modifiera och stÀnga flikar.
Viktiga metoder:
chrome.tabs.create(): Skapar en ny flik.chrome.tabs.query(): FrÄgar efter flikar som matchar specifika kriterier.chrome.tabs.update(): Uppdaterar egenskaperna för en flik.chrome.tabs.remove(): StÀnger en flik.chrome.tabs.executeScript(): Exekverar JavaScript-kod i en flik.
Exempel: Skapa en ny flik
chrome.tabs.create({url: "https://www.example.com"}, function(tab) {
console.log("Ny flik skapad med ID: " + tab.id);
});
4. chrome.alarms
chrome.alarms API:et lÄter tillÀgg schemalÀgga uppgifter som ska utföras vid en specifik tidpunkt eller efter ett angivet intervall. Detta Àr sÀrskilt viktigt i Manifest V3 eftersom det ersÀtter anvÀndningen av timers i bakgrundssidor, vilka inte lÀngre stöds.
Viktiga metoder:
chrome.alarms.create(): Skapar ett nytt larm.chrome.alarms.get(): HÀmtar ett befintligt larm.chrome.alarms.clear(): Rensar ett larm.chrome.alarms.getAll(): HÀmtar alla larm.chrome.alarms.onAlarm.addListener(): Lyssnar efter larmhÀndelser.
Exempel: Skapa ett larm
chrome.alarms.create("myAlarm", {delayInMinutes: 1, periodInMinutes: 1});
chrome.alarms.onAlarm.addListener(function(alarm) {
if (alarm.name === "myAlarm") {
console.log("Larmet utlöstes!");
}
});
5. chrome.scripting
chrome.scripting API:et lÄter tillÀgg injicera JavaScript och CSS pÄ webbsidor. Detta API Àr en nyckelkomponent i Manifest V3 och anvÀnds av service workers för att interagera med webbsidor efter att de har laddats.
Viktiga metoder:
chrome.scripting.executeScript(): Exekverar JavaScript-kod i en flik eller ram.chrome.scripting.insertCSS(): Infogar CSS i en flik eller ram.
Exempel: Injicera JavaScript i en flik
chrome.scripting.executeScript({
target: {tabId: tabId},
function: function() {
console.log("Injikterat skript!");
document.body.style.backgroundColor = 'red';
}
});
6. chrome.notifications
chrome.notifications API:et lÄter tillÀgg visa aviseringar för anvÀndaren. Detta Àr anvÀndbart för att ge uppdateringar, varningar och annan viktig information.
Viktiga metoder:
chrome.notifications.create(): Skapar en ny avisering.chrome.notifications.update(): Uppdaterar en befintlig avisering.chrome.notifications.clear(): Rensar en avisering.chrome.notifications.getAll(): HĂ€mtar alla aviseringar.
Exempel: Skapa en avisering
chrome.notifications.create('myNotification', {
type: 'basic',
iconUrl: 'icon.png',
title: 'Mitt tillÀgg',
message: 'Hej frÄn mitt tillÀgg!'
}, function(notificationId) {
console.log('Avisering skapad med ID: ' + notificationId);
});
7. chrome.contextMenus
chrome.contextMenus API:et lÄter tillÀgg lÀgga till objekt i webblÀsarens kontextmeny (högerklicksmeny). Detta ger ett bekvÀmt sÀtt för anvÀndare att komma Ät tillÀggsfunktionalitet direkt frÄn webbsidor.
Viktiga metoder:
chrome.contextMenus.create(): Skapar ett nytt objekt i kontextmenyn.chrome.contextMenus.update(): Uppdaterar ett befintligt objekt i kontextmenyn.chrome.contextMenus.remove(): Tar bort ett objekt frÄn kontextmenyn.chrome.contextMenus.removeAll(): Tar bort alla kontextmenyobjekt som skapats av tillÀgget.
Exempel: Skapa ett objekt i kontextmenyn
chrome.contextMenus.create({
id: "myContextMenuItem",
title: "Mitt kontextmenyobjekt",
contexts: ["page", "selection"]
}, function() {
console.log("Kontextmenyobjekt skapat.");
});
chrome.contextMenus.onClicked.addListener(function(info, tab) {
if (info.menuItemId === "myContextMenuItem") {
console.log("Kontextmenyobjekt klickat!");
alert("Du klickade pÄ kontextmenyobjektet!");
}
});
8. chrome.i18n
chrome.i18n API:et anvÀnds för att internationalisera ditt tillÀgg, vilket gör det tillgÀngligt för anvÀndare pÄ olika sprÄk och i olika regioner. Det gör det möjligt för dig att tillhandahÄlla lokaliserade versioner av ditt tillÀggs grÀnssnitt och meddelanden.
Viktiga metoder:
chrome.i18n.getMessage(): HÀmtar en lokaliserad strÀng frÄn tillÀggets_locales-katalog.
Exempel: AnvÀnda chrome.i18n för lokalisering
Skapa först en _locales-katalog i ditt tillÀggs rotmapp. Inuti den, skapa sprÄkspecifika mappar som en, sv, es, fr, etc.
Inom varje sprÄkmapp, skapa en messages.json-fil. Till exempel, i _locales/sv/messages.json:
{
"extensionName": {
"message": "Mitt TillÀgg",
"description": "Namnet pÄ tillÀgget."
},
"greetingMessage": {
"message": "Hej, vÀrlden!",
"description": "Ett enkelt hÀlsningsmeddelande."
}
}
Sedan, i din JavaScript-kod:
let extensionName = chrome.i18n.getMessage("extensionName");
let greeting = chrome.i18n.getMessage("greetingMessage");
console.log(extensionName); // Utskrift: Mitt TillÀgg
console.log(greeting); // Utskrift: Hej, vÀrlden!
Kompatibilitet mellan webblÀsare
Ăven om Chrome Ă€r den mest populĂ€ra webblĂ€saren för tillĂ€ggsutveckling Ă€r det viktigt att tĂ€nka pĂ„ kompatibilitet mellan olika webblĂ€sare. Firefox, Safari och andra webblĂ€sare stöder ocksĂ„ tillĂ€gg, men deras API:er och manifestformat kan skilja sig nĂ„got.
För att sÀkerstÀlla kompatibilitet mellan webblÀsare:
- AnvÀnd WebExtensions API: WebExtensions API Àr ett standardiserat API för utveckling av webblÀsartillÀgg som stöds av flera webblÀsare.
- Testa i olika webblÀsare: Testa ditt tillÀgg i olika webblÀsare för att identifiera och ÄtgÀrda kompatibilitetsproblem.
- AnvÀnd polyfills: AnvÀnd polyfills för att tillhandahÄlla saknad API-funktionalitet i olika webblÀsare.
- Villkorlig kod: AnvÀnd villkorlig kod för att anpassa dig till webblÀsarspecifika skillnader. Till exempel:
if (typeof browser === "undefined") { var browser = chrome; }
BÀsta praxis för utveckling av webblÀsartillÀgg
HÀr Àr nÄgra bÀsta praxis att följa nÀr du utvecklar webblÀsartillÀgg:
- Minimera behörigheter: BegÀr endast de behörigheter som ditt tillÀgg absolut behöver. Detta förbÀttrar anvÀndarnas integritet och sÀkerhet.
- AnvÀnd sÀkra kodningsmetoder: Följ sÀkra kodningsmetoder för att förhindra sÄrbarheter som cross-site scripting (XSS) och kodinjektion.
- Optimera prestanda: Optimera ditt tillÀggs prestanda för att minimera dess inverkan pÄ webblÀsarens prestanda.
- TillhandahÄll tydlig och koncis dokumentation: TillhandahÄll tydlig och koncis dokumentation för att hjÀlpa anvÀndare att förstÄ hur de anvÀnder ditt tillÀgg.
- Hantera fel elegant: Implementera felhantering för att förhindra att ditt tillÀgg kraschar eller orsakar ovÀntat beteende.
- HÄll ditt tillÀgg uppdaterat: Uppdatera regelbundet ditt tillÀgg för att ÄtgÀrda buggar, sÀkerhetssÄrbarheter och kompatibilitetsproblem.
- ĂvervĂ€g internationalisering (i18n): Designa ditt tillĂ€gg sĂ„ att det enkelt kan lokaliseras till olika sprĂ„k. AnvĂ€nd
chrome.i18nAPI:et. - Respektera anvÀndarnas integritet: Var transparent med hur ditt tillÀgg samlar in och anvÀnder anvÀndardata, och inhÀmta anvÀndarens samtycke nÀr det behövs. Följ relevanta integritetslagar som GDPR och CCPA.
Skicka in ditt tillÀgg till butikerna
NÀr ditt tillÀgg Àr utvecklat och testat vill du skicka in det till webblÀsarnas tillÀggsbutiker för att göra det tillgÀngligt för anvÀndare. Varje webblÀsare har sin egen butik och inlÀmningsprocess:
- Chrome Web Store: Skicka in ditt tillÀgg till Chrome Web Store för Chrome-anvÀndare. Processen innebÀr att skapa ett utvecklarkonto, paketera ditt tillÀgg och ladda upp det till butiken.
- Firefox Add-ons: Skicka in ditt tillÀgg till Firefox Add-ons för Firefox-anvÀndare. Processen liknar den för Chrome Web Store och innebÀr att skapa ett utvecklarkonto och skicka in ditt tillÀgg för granskning.
- Safari Extensions Gallery: Skicka in ditt tillÀgg till Safari Extensions Gallery för Safari-anvÀndare. Processen innebÀr att skaffa ett utvecklarcertifikat frÄn Apple och skicka in ditt tillÀgg för granskning.
NÀr du skickar in ditt tillÀgg, se till att ge korrekt och fullstÀndig information, inklusive en beskrivande titel, en detaljerad beskrivning, skÀrmdumpar och en integritetspolicy. TillÀggsbutikerna granskar inskickade bidrag för att sÀkerstÀlla att de följer deras policyer och riktlinjer.
Slutsats
Utveckling av webblÀsartillÀgg med Manifest V3 och JavaScript-API:er erbjuder ett kraftfullt sÀtt att anpassa och förbÀttra webbupplevelsen. Genom att förstÄ de grundlÀggande koncepten, följa bÀsta praxis och beakta kompatibilitet mellan webblÀsare kan utvecklare skapa vÀrdefulla och engagerande tillÀgg för anvÀndare över hela vÀrlden. I takt med att webben utvecklas kommer webblÀsartillÀgg att fortsÀtta spela en avgörande roll i att forma internets framtid.
Kom ihÄg att alltid prioritera anvÀndarnas integritet och sÀkerhet nÀr du utvecklar tillÀgg. Genom att bygga med dessa principer i Ätanke kan du skapa tillÀgg som Àr bÄde anvÀndbara och pÄlitliga.
Denna guide ger en solid grund för att komma igÄng med utveckling av webblÀsartillÀgg. NÀr du fördjupar dig, utforska de olika API:er och funktioner som finns tillgÀngliga, och experimentera med olika tekniker för att skapa innovativa och effektfulla tillÀgg.