Doplňky ve webových prohlížečích
V poslední době jsme svědky událostí okolo doplňků ve webových prohlížečích. Postupně přestává být možné používat doplňky pracující se starými rozhraními, naopak přibývají rozhraní nová. Jak se orientovat v aktuální situaci, na konferenci Internet a Technologie 15.2 ukázal Martin Straka.
Martin Straka hovoří o vývoji doplňků pro webové prohlížeče
„Zásuvný modul je v podstatě binární modul nebo nativní kód s definovaným rozhraním, se kterým může komunikovat prohlížeč, popřípadě JavaScript. Typicky je to rozhraní označované jako NPAPI nebo ActiveX. V podstatě si to můžeme představit jako dynamicky linkovanou knihovnu napsanou v jazyce C++,“ říká Martin Straka.
„Rozšíření, na rozdíl od zásuvných modulů, je aplikace s uživatelským rozhraním. Typicky jsou to panely nástrojů, tlačítka, menu atd. Implementují se s využitím JavaScriptu, HTML jazyka, kaskádních stylů, XML, případně je lze napojit na zásuvné moduly.“ Obecnějším pojmem je pak doplněk: „Pod doplňkem chápeme cokoli, co může být do prohlížeče nainstalováno – rozšíření, zásuvný modul, motivy, slovníky, jazykové sady atd.“
NPAPI a ActiveX
Historie NPAPI sahá až do roku 1995, poprvé se objevilo v prohlížeči Netscape Navigator 2.0. Prohlížeč volá viditelné funkce zásuvného modulu, lze komunikovat mezi modulem a JavaScriptem, je podporována inicializace a ukončení modulu. „V tabulce můžete vidět všechny typy prohlížečů, které toto rozhraní podporovaly nebo podporují.“
Podpora NPAPI v různých prohlížečích (prezentace Martina Straky)
Dalším rozhraním je ActiveX od firmy Microsoft. Je pouze v Internet Exploreru, a to od verze 3.0. Spouští se bez vědomí uživatele, má přístup k souborům i k registru Windows. Technologie je považována za zastaralou a nebezpečnou, nový prohlížeč Microsoft Edge ji už neobsahuje.
FireBreath: modul snadno a rychle
FireBreath je silný nástroj umožňující tvorbu zásuvných modulů v C++ napříč prohlížeči i platformami. „Disponuje různými skripty, například pro vygenerování základní kostru modulu nebo vygenerování NPAPI rozhraní. FireBreath můžeme použít jako jako NPAPI wrapper pro existující knihovny.“
Framework FireBreath je nyní přepracováván v souvislosti s končící podporou NPAPI v prohlížečích. „Do budoucna bude podpora pro alternativní techniky, které se označují jako Native Messaging, js-ctypes nebo Native Client.“
Techniky pro vývoj doplňků k prohlížeči Mozilla Firefox
Prohlížeč Mozilla Firefox je založen na jádře Gecko. Podporuje v doplňcích používání JavaScriptu, HTML, CSS a XUL, případně XPCOM a JSM. Zásuvné moduly se napojují přes zastaralé NPAPI, nověji pak přes js-ctypes.
Uvedené platí pro všechen software, kde se používá Gecko – tedy i Iceweasel, SeaMonkey, Thunderbird a další programy.
Pro vývoj lze používat čtyři různé techniky. Nejstarší z nich je založena na XUL (overlay) a brzy bude ve Firefoxu minulostí. Pracuje se deklarativně, lze přistupovat k čemukoli, je k dispozici podpora pro zásuvné moduly; po instalaci a odebrání je třeba restart prohlížeče. „Je to relativně silný nástroj. Vždy obsahuje minimálně jednu globální stránku XUL a JavaScript, který se zavádí při inicializaci doplňku.“ Tuto metodu nelze použít ve Firefoxu pro Android.
Vylepšenou technikou jsou Restartless extensions, které lze – jak název napovídá – instalovat a odebírat bez restartu. „Využívá XUL soubory, nicméně ty už jsou generovány programově v době inicializace doplňku. Musí tam existovat zaváděcí javascriptový soubor, který umí jednak zavést doplněk do prohlížeče a zároveň musí umět inicializovat grafické rozhraní.“
Add-on SDK je modulární řešení a nabízí vysokoúrovňová API v JavaScriptu. API jsou k dispozici pro uživatelské rozhraní, interakci s prohlížečem, modifikaci obsahu a komunikaci s okolím. Poskytuje nástroje pro testování a balíčkování doplňků, mezi verzemi Firefoxu je snadná přenositelnost.
Mozilla Add-on SDK (prezentace Martina Straky)
Nejnovější řešení WebExtensions je sice podporováno jen v nejnovějších verzích prohlížečů – zato ale nabízí kompatibilitu s jádrem Blink (Chrome/Chromium, Opera…), takže lze snadno tvořit doplňky pro více prohlížečů. „Důležité je říct, že tady javascripty běží mimo hlavní proces okna, takže ho nijak neblokují, neovlivňují,“ upozorňuje na jednu z výhod Martin Straka.
Nové techniky pro zásuvné moduly
Co místo zastaralého NPAPI? Moderní prohlížeče přinesly hned několik různých technik pro tvorbu zásuvných modulů. Ve Firefoxu je to javascriptové rozhraní js-ctypes. Využívá datové typy z jazyka C a umožňuje z JavaScriptu volat funkce sdílených knihoven.
„Co se týče vývoje doplňků pro Chrome, zde se používají opět techniky spojené s JavaScriptem, HTML a kaskádními styly. Chrome už nepodporuje NPAPI rozhraní pro komunikaci s binárními programy, zde se používají jiné techniky.“ Jsou to Native Client (NaCl) a PPAPI.
Programy využívající NaCl běží v sandboxu, nejsou závislé na operačním systému, nemají k němu ani přímý přístup. Tento přístup pak zajišťuje rozhraní Pepper. PPAPI, které je součástí NaCl, vychází z NPAPI, ale je přenositelné a bezpečnější (běží v samostatném procesu). Google poskytuje SDK a překladače pro architektury x86 (32 i 64 bitů) a ARM.
Další metodou je Native Messaging. Doplňky komunikují s nativní aplikací pomocí asynchronních zpráv. Aplikace běží v samostatném procesu a registruje se v prohlížeči pomocí JSON manifest souboru.
V Internet Exploreru mají doplňky podobu tlačítka, panelu nástrojů apod. Pro vývoj lze použít jazyk C++, C# a Visual Basic, k dispozici jsou knihovny ATL a MFC. Doplněk je nutné registrovat do Windows pomocí CLSID. Pro snadnou tvorbu lze využít framework Add-in Express.
Pro prohlížeč Safari je potřeba Extension Builder a certifikát vývojáře (k podpisu doplňku). Vyvíjí se pomocí webových technologií (HTML, JS, CSS), doplněk má zaváděcí stránku a tzv. plist (nastavení a uspořádání prvků v jazyce XML). Pro binární moduly lze stále využívat NPAPI.
DNSSEC/TLSA Validator
DNSSEC/TLSA Validator je doplněk do různých webových prohlížečů vyvíjený v Laboratořích CZ.NIC. Poskytuje informace o zabezpečení DNS technologií DNSSEC a o validaci certifikátů technologií DANE. Používá zásuvné moduly napsané v jazyce C (nad Unboundem a OpenSSL).
Pro fungování validátoru je potřeba provádět různé operace – a ne vždy (v určité kombinaci prohlížeče a rozhraní) jsou všechny k dispozici. Mezi takové operace patří například UDP komunikace, zjištění IP adresy prohlížeče nebo blokování spojení HTTPS.
Podpora různých operací v kombinacích prohlížečů a rozhraní (prezentace Martina Straky)
Červeně označené řádky odpovídají aktuální implementaci. „Je ale nutno říct, že komunikace probíhá asynchronně, to znamená, že nejsme schopni blokovat HTTP spojení; i když se to dá přepnout do synchronního módu – je čistě na uživateli, jestli si to přepne,“ upřesňuje Martin Straka situaci okolo podpory jedné z operací.