Patrick Griffins aka TingPing v blogovém zápisku přiblížil, jak bude vypadat podpora WebExtensions, standardizovaných rozšíření v prohlížeči webový stránek “Web”, známém též pod jménem Epiphany. Jde o plánovanou novinku do příštího vydání GNOME (snad už 43?)

Co jsou WebExtensions?

Jde o soubor různých API, která řídí přístup rozšíření k funkcím prohlížeče, počítače, nebo jednotlivým webovým stránkám. API vzniklo při změnách, kdy Firefox opouštěl staré formáty rozšíření, implementoval nové API (podobající se tomu použitém v prohlížeči Google Chrome). V roce 2020 se rozhodlo vydat podobnou cestou i Safari. Nicméně WebExtensions nejsou úplně 100% univerzální, některé části ještě nejsou zcela přenositelné mezi prohlížeči a některé třeba do budoucna vůbec nebudou. Jde ale o solidní základ a pokus o jejich standardizaci. Epiphany začíná přidávat podporu od verze 43.alpha

Náhled na okno GNOME Web s oknem pro rozšíření

Nově můžete přidávat ručně rozšíření do GNOME Web.

Co WebExtensions umí?

WebExtensions umožňují na pozadí vytvořit stránku, která má přístup k objektu “browser”. Podle toho, co uživatel povolí, jsou zde přístupné funkcionality prohlížeče.

Kromě této neviditelné stránky mohou rozšíření provádět i viditelné změny. Příkladem jsou třeba různé “Akce prohlížeče (Browser Action)” v horní liště prohlížeče, které zobrazí vyskakující okno s obsahem. Rozšíření mohou mít také svojí stránku, kde můžete dané rozšíření konfigurovat (Options Page). Rozšíření mohou přímo vkládat skripty (Content Scripts) do stránek. Ty mají přistupují k DOM (reprezentaci webové stránky v prohlížeči) a komunikují s ostatními částmi pomocí krátkých JSON zpráv.

Příklad užití

Uživatelé používají často různé správce hesel. Takový správce má stránku na pozadí, která obhospodařuje uživatelův účet. Necháte si vyskočit okno, kde můžete editovat některé možnosti, zobrazit heslo, vygenerovat nové, apod. No a nakonec do každé stránky vkládá skript. Skript projde celou stránku a snaží se uživateli nabízet odpovídající akce (generování hesla, vložení zapamatovaného, apod.). Informace si vyměnuje se stránkou běžící na pozadí, která se právě stará o tu synchronizaci na pozadí. V Epiphany už funguje skoro vše, zbývá vyhladit pár detailů pro Bitwarden.

Podpora v Epiphany

Epiphany 43.alpha podporuje základní rozhraní (popsaná výše), projekt se snaží implementovat Firefox ManifestV2 API, které, kde je to možné, zahrnuje kompatibilitu s rozšířeními pro Chrome. Podpora manifestu v3 je vedle verze 2 do budoucna také plánována. V tuto chvíli jsou podporované následující API:

  • alarms - Plánování událostí spouštěných podle času, nebo data.
  • cookies - Správa cookies v prohlížeči.
  • downloads - Možnost spouštět a spravovat stahování
  • menus - Vytváření kontextových menu
  • notifications - Nativní notifikace
  • storage - Ukládání nastavení daného rozšíření
  • tabs - Správa a monitoring záložek prohlížeče (vytváření, zavírání, apod.)
  • windows - Správa a monitoring oken prohlížeče

Bohužel chybí webRequest, které je velmi často používané různými rozšířeními jako třeba uBlockOrigin nebo PrivacyBadger. Implementace tohoto API je ale bohužel závislá na vylepšeních ve WebKitGTK (projekt renderovacího enginu pro grafickou knihovnu GTK). Pokud vás současný stav zajímá, nebo se chcete podívat na detaily, mrkněte se do dokumentace.

Instalování rozšíření do Epiphany

Podpora je stále experimentální, takže může vést k pádu, nebo neočekávanému chování. Všechno, pokud možno, chtějí vývojáři Epiphany hlásit (spíš jim, než přímo vývojářům rozšíření).

Instalace testovací vydání z flatpak repozitáře gnome-nightly.

flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
flatpak install gnome-nightly org.gnome.Epiphany.Devel
flatpak run --command=gsettings org.gnome.Epiphany.Devel set org.gnome.Epiphany.web:/org/gnome/epiphany/web/ enable-webextensions true

Objeví se položka s rozšířeními a pokud budete prohlížeč spouštět z terminálu uvidíte i ladící informace z rozšířeními. Rozšíření stahujte přímo ze stránek Mozilly. Hodně štěstí a těšíme se na 43-final.