Kun selainlaajennuksia kehitetään, on tärkeää ymmärtää, kuinka eri osat toimivat yhdessä ja miten niitä hallitaan. Laajennuksen taustaskripti, käyttöliittymä ja sisältö skriptit ovat keskeisiä elementtejä, jotka mahdollistavat laajennuksen monipuolisen toiminnan. Tässä tarkastellaan laajennuksen taustaskriptin ja käyttöliittymien, kuten ponnahdusikkunan ja asetussivun, luomista.

Taustaskriptin lisääminen on ensimmäinen askel, joka mahdollistaa laajennuksen toiminnan taustalla. Tämä skripti ajetaan itsenäisesti, eikä se ole suoraan yhteydessä selainikkunaan. Käytännössä se voi toimia esimerkiksi tapahtumien käsittelijänä, joka reagoi selaimen tapahtumiin tai laajennuksen tilan muutoksiin. Esimerkiksi luodaan yksinkertainen taustaskripti, joka tulostaa viestin konsoliin:

javascript
console.log("Hello from the background script!");

Taustaskriptin määrittelemiseksi täytyy myös päivittää manifest.json -tiedosto, joka kertoo selaimelle, että kyseinen tiedosto tulee ladata taustapalvelun työläisenä (service worker). Tämän jälkeen taustapalvelun toiminta voidaan tarkistaa selaimen kehittäjätyökaluilla.

json
{ "background": { "service_worker": "background.js" } }

Laajennus saattaa näyttää taustatyöntekijän tilan inaktiivisena tietyin väliajoin, koska Google Chrome tyhjentää käyttämättömät resurssit automaattisesti. Työntekijä ladataan uudelleen vain, kun se on tarpeen, kuten viestien lähettämisen yhteydessä. Tämä työskentelymalli on olennainen ja se tulee olemaan keskiössä myöhemmin käsiteltävissä asioissa, kuten laajennuksen tilan hallinnassa.

Seuraavaksi on aika lisätä käyttöliittymä laajennukseen. Aluksi voidaan luoda ponnahdusikkuna, joka avautuu laajennuksen työkalupalkin kuvaketta klikkaamalla. Tässä tarvitaan kolme tiedostoa: popup.html, popup.css ja popup.js. HTML-tiedosto määrittelee sivun rakenteen, CSS vastaa ulkoasusta ja JavaScript vastaa interaktiosta.

html
<!DOCTYPE html>
<html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Popup</title> </head> <body> <h1>This is the popup page!</h1> </body> </html>

Kun laajennuksen manifestiin lisätään seuraava osuus, se avaa ponnahdusikkunan, kun käyttäjä klikkaa työkalupalkin kuvaketta:

json
{
"action": { "default_popup": "popup/popup.html" } }

Näin käyttäjä voi avata ponnahdusikkunan ja nähdä sen sisällön, joka voi olla myös interaktiivinen.

Seuraava askel on asetussivun lisääminen laajennukseen. Asetussivu on paikka, jossa käyttäjä voi muokata laajennuksen asetuksia. Asetussivu voi sisältää myös ponnahdusikkunan kaltaisia elementtejä, mutta sen käyttöliittymä on erikseen määritelty ja se saattaa vaatia erityisiä oikeuksia selaimessa.

json
{
"options_page": "options/options.html" }

Kun asetussivu on määritelty manifestissa, se voidaan avata hiiren oikealla painikkeella työkalupalkin kuvakkeesta ja valitsemalla "Options". Tämä antaa käyttäjälle mahdollisuuden säätää laajennuksen asetuksia.

Laajennukseen voidaan myös lisätä sivupaneeli, joka on toinen käyttöliittymän osa. Tämä sivupaneeli toimii tavallisesti selainsivuston sivussa, ja se voidaan avata samalla tavoin kuin asetussivu ja ponnahdusikkuna. Sivupaneelissa käyttäjä voi nähdä lisätietoja tai ohjeita laajennuksen käytöstä.

json
{
"permissions": ["sidePanel"], "side_panel": { "default_path": "side-panel/side-panel.html" } }

Sivupaneelissa voidaan esittää selainlaajennuksen tietoja tai lisätoimintoja, jotka eivät mahtuneet ponnahdusikkunaan.

Lopuksi voidaan lisätä sisältöskripti, joka integroi laajennuksen suoraan verkkosivustoon. Sisältöskripti mahdollistaa käyttäjän suorittamien toimien yhdistämisen sivuston toimintaan, esimerkiksi widgetin tai muun elementin lisäämisen suoraan sivulle.

Sisältöskripti määritellään seuraavasti:

json
{
"content_scripts": [ { "matches": ["<all_urls>"],
"css": ["content-script/content-script.css"],
"js": ["content-script/content-script.js"] } ] }

Sisältöskripti voi lisätä sivulle omia elementtejään, kuten esimerkiksi yksinkertaisen widgetin:

javascript
const tpl = `<div id="container">This is the content script!</div>`;
document.body.insertAdjacentHTML("beforeend", tpl);

Tämä tekee laajennuksesta entistä dynaamisemman, sillä se pystyy muokkaamaan verkkosivuston sisältöä ja ulkoasua suoraan.

Tärkeää on muistaa, että kaikki nämä osat eivät ole erillisiä yksiköitä, vaan ne toimivat yhdessä. Esimerkiksi ponnahdusikkunan napit voivat lähettää viestejä taustaskriptiin, joka puolestaan voi ohjata sisältöskriptiä suorittamaan tiettyjä toimintoja. Laajennuksen eri osien välinen kommunikointi ja tiedonsiirto ovat keskeisiä, ja niiden ymmärtäminen auttaa rakentamaan tehokkaita ja käyttäjäystävällisiä selainlaajennuksia.

Miten määrittää ja hallita sisältöskriptejä ja turvallisuuspolitiikkoja selainlaajennusten manifestissa?

Sisältöskriptit ovat olennainen osa selainlaajennuksia, jotka mahdollistavat koodin suorittamisen sivustojen sisällä ja niiden muokkaamisen. Manifest-tiedostossa sisältöskriptien määrittely tapahtuu "content_scripts"-kohdassa, jossa voidaan tarkasti kontrolloida, mihin URL-osoitteisiin skriptit injektoidaan. Esimerkiksi "matches"-avain määrittää ne URL-mallit, joihin skriptit kohdistuvat, kun taas "include_globs" ja "exclude_matches" mahdollistavat tarkemman suodattamisen. "all_frames"-asetuksella voidaan laajentaa skripti myös sisäkkäisiin kehyksiin, jolloin skripti toimii myös iframe-elementtien sisällä. "match_about_blank" sallii skriptin suorittamisen myös tyhjillä sivuilla kuten about:blank, mikä on erityisen hyödyllistä monimutkaisissa tilanteissa.

Turvallisuuteen liittyvät asetukset, kuten Content Security Policy (CSP), ovat kriittisiä laajennusten toimintavarmuuden ja turvallisuuden kannalta. Manifest V3 toi merkittäviä muutoksia CSP:n rakenteeseen ja sääntöihin. CSP:n avulla määritellään, mitä skriptejä ja resursseja laajennus voi käyttää. MV3-versiossa CSP on jaettu kahteen osaan: "extension_pages" ja "sandbox". Tämä jaottelu mahdollistaa erilliset säännöt normaaleille laajennussivuille ja hiekkalaatikkosivuille. MV3 rajoittaa voimakkaasti esimerkiksi eval()-kutsujen ja kolmansien osapuolien skriptien suorittamista, mikä lisää turvallisuutta ja vähentää hyökkäysvektoreita. Manifestissa CSP:a ei voi heikentää, ainoastaan tiukentaa, joten aiemmat haavoittuvuudet eivät pääse läpi uudessa versiossa.

Selainlaajennukset ovat käytännössä pieniä palvelimia, joiden vuoksi niiden täytyy ottaa huomioon samankaltaiset turvallisuusuhat kuin verkkopalvelinten. Tässä yhteydessä Cross-Origin-Embedder-Policy (COEP) ja Cross-Origin-Opener-Policy (COOP) -asetukset ovat tärkeitä. Nämä Chromium-pohjaisissa selaimissa toimivat manifestin ominaisuudet sallivat laajennuksen toimia cross-origin-eristyksessä, joka on edellytys monille turvallisuutta lisääville ominaisuuksille. Näiden asetusten avulla laajennus voi määrittää, miten se käsittelee ulkoisia resursseja ja kommunikoi muiden selainkontekstien kanssa. COEP asettaa vaatimuksia upotettaville resursseille, kun taas COOP kontrolloi ikkunan avaamisen käytöstä. Ne toimivat yhdessä varmistaen, että laajennuksen suoritusympäristö on eristetty ja vähemmän altis haitallisille hyökkäyksille.

MV3-versio toi myös uusia ominaisuuksia, kuten Declarative Net Request -ominaisuuden, joka mahdollistaa laajennuksille sääntöjen määrittelyn verkkopyyntöjen hallintaan. Tämä toimii JSON-muotoisten sääntötiedostojen avulla, joissa voidaan määrittää monimutkaisia suodatus- ja uudelleenohjaussääntöjä. Tämä parantaa laajennuksen suorituskykyä ja turvallisuutta, koska säännöt käsitellään selaimen ytimessä ilman jatkuvaa JavaScript-koodin suorittamista.

Manifestin muita merkittäviä kenttiä ovat esimerkiksi "default_locale", joka määrittää laajennuksen oletuskielen, mikä on välttämätöntä monikielisissä laajennuksissa, ja "description", joka tarjoaa virallisen kuvauksen laajennuksesta sekä selaimessa että markkinapaikoissa. Kehittäjät voivat myös määrittää itsensä "developer"-kentässä, joka näkyy laajennuksen tiedoissa ja lisää luottamusta käyttäjien keskuudessa.

Merkittävä osa laajennuksen määrittelyä on myös "devtools_page", joka osoittaa selainlaajennuksen kehitystyökalujen HTML-tiedoston sijainnin. Tämä tiedosto toimii kehitysympäristön käynnistäjänä, mutta ei esiinny näkyvänä sivuna käyttäjälle, vaan taustaprosessina, joka mahdollistaa kehittäjätyökalujen käytön.

On olennaista ymmärtää, että manifest-tiedoston kentät ja niiden arvot eivät ole pelkästään teknisiä määritelmiä, vaan ne vaikuttavat suoraan laajennuksen turvallisuuteen, suorituskykyyn ja käyttäjäkokemukseen. Lisäksi eri manifest-versioiden erot tuovat mukanaan uusia vaatimuksia ja rajoituksia, joiden tunteminen on välttämätöntä laajennuksen onnistuneelle kehittämiselle ja ylläpidolle.

Laajennusten turvallisuuskäytännöt eivät ole staattisia; ne kehittyvät jatkuvasti vastaamaan uusia uhkia. Tämä edellyttää kehittäjiltä syvällistä ymmärrystä selainarkkitehtuurista, eristyspolitiikoista ja nykyaikaisista web-turvallisuusstandardeista. Tässä kontekstissa myös selainkehittäjien tarjoamat viralliset dokumentaatiot ja yhteisön jakamat käytännöt ovat korvaamattomia tietolähteitä. Vain kattava ymmärrys näistä periaatteista mahdollistaa laadukkaiden ja turvallisten selainlaajennusten rakentamisen, jotka vastaavat sekä käyttäjien että selainten asettamiin vaatimuksiin.

Miten ja milloin sisältöskriptejä suoritetaan Chrome-laajennuksissa?

Chrome-laajennusten sisältöskripteillä on useita ominaisuuksia, joiden avulla kehittäjä voi hallita tarkasti, milloin, missä ja miten skripti suoritetaan verkkosivulla. Keskeinen parametri on run_at, joka määrittää, milloin skripti injektoidaan suhteessa sivun lataukseen. Vaihtoehdot ovat document_start, jolloin skripti suoritetaan heti CSS-tiedostojen latautumisen jälkeen mutta ennen DOM:n rakentamista ja muiden skriptien ajoa; document_end, jolloin skripti ajetaan DOM:n valmistuttua mutta ennen alaresurssien, kuten kuvien, latausta; sekä document_idle, jolloin selain valitsee parhaan hetken DOM:n valmistuttua ja ikkunan onload-tapahtuman ympärillä. Tämä ajoitus on merkittävä, sillä se vaikuttaa siihen, kuinka skripti pystyy vuorovaikuttamaan sivun elementtien ja muiden skriptien kanssa ja välttämään konflikteja. Esimerkiksi CSS-sisältöskriptejä on suositeltavaa ajaa mahdollisimman aikaisin välttääkseen sivun tyylien välkkymistä.

Sisältöskripteille voi määrittää myös "world"-asetuksen, joka määrittää skriptin suoritusympäristön. Oletuksena on eristetty (ISOLATED) ympäristö, jossa skripti toimii omassa JavaScript-tilassaan eikä pääse suoraan käsiksi sivun globaalimuuttujiin tai funktioihin. Toinen vaihtoehto on MAIN, jolloin skripti jakaa ympäristön sivun kanssa ja voi lukea sekä muokata sivun globaaleja muuttujia ja funktioita. Tämä tosin avaa kaksisuuntaisen pääsyn, mikä voi vaarantaa laajennuksen turvallisuuden, sillä sekä sivu että laajennus voivat nyt nähdä ja manipuloida toistensa JavaScript-tilaa. Eristetty ympäristö suojaa tätä riskiä, mutta tarjoaa silti pääsyn jaettuihin resursseihin kuten DOMiin, localStorageen ja muihin selaimen rajapintoihin.

Vaikka sisältöskriptit eivät pääse suoraan käsiksi toistensa tai isäntäsivun muuttujiin, ne voivat silti jakaa tapahtumia DOM:n kautta. Tämä mahdollistaa esimerkiksi käyttäjän toimien ja tapahtumien täydellisen emuloinnin, sillä tapahtumat kuten click ja keydown laukaisevat käsittelijöitä sekä isäntäsivulla että laajennuksen sisältöskripteissä. Lisäksi sisältöskriptit voivat manipuloida sivun elementtejä esimerkiksi fokusoinnin, blurin ja skrollauksen avulla. Tämä tapahtumien ja DOM:n jakaminen on avainlaatuinen ominaisuus, joka mahdollistaa laajennusten monipuolisen vuorovaikutuksen verkkosivujen kanssa.

Esimerkkinä voidaan mainita skripti, joka poistaa kaikki sivun tyylit joko poistamalla CSS-tiedostot ja tyylielementit tai tyhjentämällä elementtien style-attribuutit. Tämä on mahdollista eristetystä ympäristöstä huolimatta, sillä DOM on jaettu resurssi. Tämä osoittaa, että vaikka JavaScript-ympäristöt ovat eristettyjä, sivun ulkoasu ja rakenne ovat silti laajennuksen muokattavissa.

On tärkeää huomata, että JavaScriptin dynaamisesti lisäämät CSS-tyylit skriptin suorituksen jälkeen eivät välttämättä poistu ilman lisätoimenpiteitä, kuten MutationObserver-objektin käyttöä, joka kuuntelee DOM-muutoksia ja reagoi niihin. Tämä korostaa, että sisältöskriptien hallinta ja ajoitus ovat keskeisiä laadukkaiden ja luotettavien Chrome-laajennusten suunnittelussa.

Sisältöskripteihin liittyvien turvallisuusnäkökohtien ymmärtäminen on välttämätöntä, sillä väärin konfiguroidut skriptit voivat altistaa laajennuksen tai käyttäjän tiedot vaaralle. Kun skripti suoritetaan MAIN-ympäristössä, on syytä arvioida tarkasti, mitä koodia jaetaan ja minkälaista vuorovaikutusta sallitaan, jotta ei avata portteja haitallisille hyökkäyksille tai tietovuodoille.

Kaiken kaikkiaan sisältöskriptien ajoituksen ja suoritusympäristön hallinta on olennainen osa laajennusten kehitystä, joka vaatii syvällistä ymmärrystä selaimen toiminnasta ja sivujen rakenteesta. Tämä tieto auttaa varmistamaan laajennuksen tehokkaan, turvallisen ja tarkoituksenmukaisen toiminnan eri tilanteissa.

Mitä ovat selaimen laajennusten ohjelmalliset injektiot ja laajennusrajapinnat?

Ohjelmallinen injektio on keskeinen käsite selaimen laajennusten kehittämisessä, joka mahdollistaa koodin, kuten inline-funktioiden tai tyylien, lisäämisen suoraan verkkosivulle. Tämä mekanismi antaa laajennuksille mahdollisuuden muokata sivun sisältöä ja käyttäytymistä dynaamisesti. Injektiossa voidaan myös välittää argumentteja ja ladata ulkoisia tiedostoja, mikä laajentaa toiminnallisuutta entisestään. Tämän lisäksi laajennusten rekisteröinti ja rekisteröinnin poistaminen hallinnoivat koodin elinkaarta ja varmistavat, että injektiot toimivat odotetulla tavalla vain tarvittaessa.

Selaimen laajennukset perustuvat standardoituihin rajapintoihin, joita määrittelee muun muassa W3C. Näiden rajapintojen avulla varmistetaan laajennusten yhteensopivuus eri selainten kanssa ja niiden turvallinen toiminta. Global API Namespace eli globaali rajapintatila tarjoaa yhtenäisen pääsyn erilaisiin toimintoihin, kuten tapahtumien käsittelyyn, tiedon tallennukseen ja verkko- tai käyttäjän todennukseen. Modernit laajennukset käyttävät yhä enemmän Promise-pohjaista asynkronista ohjelmointia perinteisten callbackien sijaan, mikä helpottaa virheiden hallintaa ja parantaa koodin luettavuutta.

Virheiden käsittely on olennainen osa laajennusten toimintavarmuutta, ja kontekstisidonnaiset rajapinnat rajoittavat tiettyjen toimintojen käyttöä tilanteiden ja käyttäjäoikeuksien perusteella. Tapahtumarajapinnat tarjoavat joustavat mahdollisuudet reagoida käyttäjän toimintaan ja selaimen sisäisiin tapahtumiin, kun taas tapahtumien suodatus mahdollistaa vain tarpeellisen datan käsittelyn tehokkaasti.

WebExtensions API tarjoaa laajan kirjaston toimintoja, kuten lupien hallinnan, viestinnän laajennuksen eri osien välillä, tiedon tallennuksen, käyttäjän todennuksen, verkkopyyntöjen käsittelyn sekä kansainvälistämisen. Lisäksi kehittyneet ominaisuudet kuten tekoälyintegraatiot ja selaimen sekä järjestelmän hallinta avaavat uusia mahdollisuuksia laajennusten hyödyntämiseen. Selaimen tilanhallinta, välilehdet ja ikkunat, käyttäjäskriptit, virheenkorjaus ja haku ovat esimerkkejä syvemmistä hallintatyökaluista, joita laajennukset voivat käyttää.

Tietoturva ja yksityisyys ovat keskeisiä näkökulmia laajennusten kehityksessä. Lupien hallinta, niiden tarkistaminen, valinnaiset luvat sekä niiden elinkaari ovat kriittisiä elementtejä, jotka vaikuttavat sekä käyttäjäkokemukseen että laajennuksen hyväksyntään selainten kaupoissa. Lupien hallintaan liittyy myös varoitusten ja julkaisun erityisvaatimukset, jotka varmistavat, ettei laajennus pääse vahingollisiin toimintoihin ilman käyttäjän tietoa ja suostumusta.

Tämän kokonaisuuden ymmärtäminen on tärkeää, sillä selaimen laajennukset toimivat tiiviissä vuorovaikutuksessa selaimen sisäisten prosessien kanssa, mutta niiden toiminnan on oltava sekä tehokasta että turvallista. Laajennuksen kehittäjän tulee hallita niin koodin dynaaminen injektointi kuin laajennusrajapintojen asynkroninen käyttö ja lupien hallinta, jotta lopputuote olisi käyttäjäystävällinen, suorituskykyinen ja luotettava.

Lisäksi on syytä huomioida, että selainlaajennusten kehitys on jatkuvasti kehittyvä ala, jossa standardit ja rajapinnat muuttuvat ja laajenevat. On välttämätöntä seurata aktiivisesti selainten julkaisemia päivityksiä sekä turvallisuusohjeita. Laajennuksen käyttötarkoitus, kohdeyleisö ja yksityisyydensuojan vaatimukset ohjaavat merkittävästi valittuja toteutustapoja ja teknisiä ratkaisuja.

Miten selainlaajennukset hallitsevat ja hyödyntävät selaimen tilaa ja resursseja?

Selaimen laajennukset voivat käyttää monipuolisesti erilaisia rajapintoja (API) hallitakseen selaimen tilaa, käyttäjän toimintaa ja resursseja. Näiden työkalujen avulla ne voivat tehdä esimerkiksi näyttökuvia, muokata selaimen asetuksia tai hallita selaushistoriaa ja tiedostoja.

Näytön ja sivun kaappaus on keskeinen toiminto, jonka avulla laajennukset voivat tallentaa aktiivisen välilehden sisällön joko HTML-muodossa, kuvatiedostona tai tallentaa reaaliaikaista videokuvaa työpöydältä tai selaimen välilehdeltä. Chrome tarjoaa tähän useita eri API:ta, kuten pageCapture, tabCapture, desktopCapture ja captureVisibleTab. Esimerkiksi pageCapture API mahdollistaa yksittäisen välilehden tallentamisen MHTML-muodossa, joka yhdistää sivun sisällön yhdeksi tiedostoksi. Toisaalta tabCapture API voi ottaa videota aktiivisesta välilehdestä ja desktopCapture voi tallentaa koko työpöydän tai yksittäisen ikkunan sisällön. Näiden toimintojen käyttö edellyttää tarkkaa lupien hallintaa, koska ne koskettavat käyttäjän yksityisyyttä ja tietoturvaa.

Proxy-asetusten hallinta on toinen tärkeä osa laajennusten toimintaa. chrome.proxy API antaa laajennuksille mahdollisuuden muuttaa selaimen välityspalvelinasetuksia, kuten ottaa käyttöön SOCKS5-proxy tai määritellä listan verkkosivuista, joiden liikenne ohitetaan proxy-palvelimen kautta. Tämä mahdollistaa verkon liikenteen tarkemman hallinnan ja esimerkiksi pääsyn suljetuille alueille tai anonymiteetin lisäämisen. Proxy-rajapinnat ovat kuitenkin teknisesti monimutkaisia, ja niiden käyttö eroaa selaimien välillä.

Selaimen tilan hallintaan kuuluu myös fonttiasetusten muokkaaminen. fontSettings API antaa laajennuksille mahdollisuuden vaihtaa fontteja kielen tai fonttityypin perusteella, mikä on erityisen hyödyllistä monikielisissä ympäristöissä tai esteettömyyden parantamiseksi. Lisäksi contentSettings API tarjoaa hienojakoisen tavan hallita selaimen käyttäytymistä sivustokohtaisesti: JavaScriptin, evästeiden, kameran, mikrofonin ja muiden ominaisuuksien salliminen tai estäminen voidaan räätälöidä eri verkkosivustoille.

Evästeiden hallinta chrome.cookies API:n kautta on välttämätöntä, kun halutaan lukea, muokata tai poistaa selaimen evästeitä ohjelmallisesti. Evästeet ovat keskeisiä istuntotiedon ja käyttäjäkohtaisen kokemuksen ylläpidossa, mutta samalla ne herättävät yksityisyydensuojakysymyksiä, joita laajennuksen on huomioitava.

Kirjanmerkkien, lukulistan ja selaushistorian hallinta ovat tärkeitä toimintoja selaimen käyttökokemuksen parantamiseksi. chrome.bookmarks, chrome.readingList ja chrome.history API:t mahdollistavat näiden tietojen luomisen, hakemisen ja muokkaamisen ohjelmallisesti. Näiden avulla laajennukset voivat tarjota käyttäjälle helppokäyttöisiä tapoja järjestää ja hakea aiemmin selattuja tai tallennettuja sivuja. Vastaavasti downloads API mahdollistaa tiedostojen latausten hallinnan ja käynnistämisen, mikä on keskeistä esimerkiksi laajennuksille, jotka helpottavat tiedostojen hallintaa tai automatisoitua lataamista.

TopSites API antaa pääsyn käyttäjän yleisimmin vierailemiin sivustoihin, mikä voi auttaa räätälöimään käyttöliittymää tai tarjoamaan nopeita linkkejä suosituimpiin kohteisiin. Selaustietojen hallinta chrome.browsingData API:n avulla puolestaan mahdollistaa selaushistorian, välimuistin ja muiden tallennettujen tietojen ohjelmallisen poistamisen, mikä on tärkeää yksityisyyden suojaamisessa ja selaimen suorituskyvyn ylläpidossa.

On olennaista ymmärtää, että nämä API:t eivät toimi erillisinä palasina, vaan ne muodostavat laajennuksille kokonaisvaltaisen mahdollisuuksien verkoston, jolla voidaan vaikuttaa sekä selaimen tekniseen toimintaan että käyttäjän kokemukseen. Kaikki toiminnot edellyttävät huolellista lupien hallintaa ja käyttäjän suostumusta, koska ne voivat vaikuttaa merkittävästi yksityisyyteen ja tietoturvaan. Siksi laajennuksia kehitettäessä on syytä kiinnittää erityistä huomiota turvallisuusnäkökohtiin ja siihen, että käyttäjä ymmärtää, mitä laajennus tekee taustalla. Näin vältetään väärinkäytökset ja parannetaan luottamusta.

Endtext