Linux E X P R E S

Facebook

Rozhraní pro tvorbu doplňků v moderních prohlížečích

puzzle.png

Okolo doplňků pro webové prohlížeče to v poslední době vře. Ruší se podpora pro starší technologie, současně ale vznikají nové. Martin Straka ukázal na konferenci IT 15.2, jaké jsou dnes možnosti vývoje doplňků.


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 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) 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ě XPCOMJSM. 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) 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) 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í.

Diskuze (2) Nahoru