Nowe rozszerzenia Firefoxa

Do tej pory rozszerzenia Firefoxa korzystały z już przestarzałych i nieporęcznych interfejsów XPCOM (Cross Platform Component Object Model), XBL (XML Binding Language) oraz XUL (XML User Interface Language), które mają w przyszłości być zastąpione przez WebExtensions. Ten nowy interfejs wzoruje się na technologii Blink API z Google Chrome.
Nowe rozszerzenia Firefoxa

Ma to dwie zalety i jedną wadę. WebExtensions są zasadniczo łatwiejsze w używaniu niż rozszerzenia z liczącym już 15 lat własnym wynalazkiem Firefoxa. A ponieważ na podobną technologię stawiają również Google Chrome i Opera, programiści mogą łatwiej publikować swoje rozszerzenia dla wielu przeglądarek. Problem leży w tym, że stara technologia rozszerzeń zostanie wyeliminowana, a nieprzeprogramowane narzędzia wkrótce nie będą działać w Firefoxie. Wtyczka NoScrpit np. zostanie z pewnością przeportowana. Kłopoty mają rzekomo sprawiać rozszerzenia do pobierania, np. DownThemAll.

Jak prosta strona internetowa

Idea techniczna stojąca za nowymi WebExtensions jest prosta: programowanie wtyczek powinno być tak samo proste jak stron internetowych. Programiści jeden raz piszą kod, który bez większych zmian ma działać wszędzie: w Firefoxie, ale też w Chromie, Operze, Safari, a później także w Microsoft Edge, kiedy przeglądarka systemowa Windows 10 zacznie obsługiwać rozszerzenia.

Z tego powodu wśród komponentów WebExtensions nie znajdziecie używanych do tej pory JavaScriptu, HTML-a ani CSS-a. Nowe rozszerzenia są więc w gruncie rzeczy prostymi stronami internetowymi, których albo wcale nie widać, bo działają w tle, albo są wyświetlane jako przyciski, pop-upy bądź paski boczne. Rozszerzenia, jak zwykle u Firefoxa, są pakowane jako plik XPI (Cross Platform Installer), przy czym niewykluczone, że w tym celu wykorzystane zostanie popularny algorytm kompresji ZIP. Za XPI w końcu nie stoi nic innego niż kontener ZIP, który w sposób pozwalający na oszczędność miejsca wiąże właściwe elementy rozszerzenia. A potencjalnych modułów rozszerzenia jest niewiele: jedynym niezbędnie koniecznym elementem jest plik manifest (manifest.json). Zawiera on metadane i łączy pozostałe elementy w całość. Przykład jego budowy możecie zobaczyć na grafice po prawej stronie.

WebExtensions: budowa

Na razie Mozilla udostępnia tylko proste przykłady WebExtensions. Zasadniczą budowę i dodatkowe elementy zaprezentujemy na przykładzie rozszerzenia Beasify – mowa o okienku pop-up, które po kliknięciu myszką wyświetla różne zdjęcia.

Sercem WebExtensions są skrypty content, przez które nowe rozszerzenia wchodzą w interakcję z otwieranymi stronami internetowymi. Przez WebExtensions można skorzystać z elementów przeglądarki, np. tabów, zakładek albo historii. Inne moduły pliku XPI określają widoczne w Firefoxie elementy rozszerzenia, dajmy na to przyciski albo paski boczne. Miłym dodatkiem okazuje się możliwość łatwego korzystania z innych zasobów webowych, a więc np. pobierania zdjęć albo innych danych z Internetu. Jest jeszcze kilka wbudowanych sprytnych funkcji, które mają ułatwić życie programistom: można przykładowo identyfikować treści stron internetowych i je blokować. Jeśli jedno rozszerzenie korzysta z kilku stron internetowych, te mogą komunikować się bezpośrednio i szczególnie szybko.

Nowe rozszerzenia aktualnie są w stadium alfa – w wersji finalnej Firefox będzie udostępniał więcej funkcji niż inne przeglądarki. Oprócz tego ma istnieć coś na kształt meta-API, gdzie

w rozszerzeniu na życzenie możliwe będzie używanie funkcji eksperymentalnych.

Każda wtyczka jako oddzielny proces

To nie przypadek, że Mozilla przebudowuje rozszerzenia właśnie teraz: sam Firefox jest w fazie transformacji. W projekcie nazwanym Electrolysis trwają prace nad Firefoxem wieloprocesowym, który ma zostać wprowadzony w dwóch fazach. Faza 1: przeglądarka jako taka działa w osobnym wątku (user interface process), niezależnie od treści (content process). Faza druga: dodatkowo każdy otwarty tab ma działać we własnym procesie. To korzystne z punktu widzenia bezpieczeństwa i stabilności przeglądarki. WebExtensions już teraz faktycznie funkcjonują w oparciu o Electrolysis – tradycyjne wtyczki niestety jeszcze nie. Kiedy w Firefoxie zmieni się model działania procesów, jak najwięcej wtyczek powinno być już po transformacji.

Lepsza ochrona przed malware’em

Nowa architektura procesu: WebExtensions muszą obsługiwać nową, wieloprocesową architekturę Firefoxa o nazwie Electrolysis, która przynosi wzrost wydajności i bezpieczeństwa.

Wprowadzając WebExtensions, Mozilla chce lepiej zapanować zwłaszcza nad bezpieczeństwem. Rozszerzenie Firefoxa ma dostęp właściwie do wszystkiego, a więc również do wyświetlania stron i wszystkich ustawień przeglądarki. Niechciane paski narzędzi wykorzystują ten słaby punkt, więc Firefox musi się zmagać z coraz większą ilością niepożądanego oprogramowania albo wręcz malware’u. Dlatego rozszerzenia Mozilli muszą od niedawna być sygnowane, bo inaczej Firefox (począwszy od wersji 45) będzie je blokował. Od momentu wprowadzenia WebExtensions Mozilla chce zdecydowanie lepiej kontrolować rozszerzenia i ich aktualizacje.

Testowanie WebExtensions

Użytkownicy i developerzy mogą przeprowadzić pierwsze testy nowych WebExtensions w Firefox Nightly. Tak to się robi:

  • Zainstalujcie wersję Nightly Firefoxa
  • W »about:config« wartość »xpinstall.signatures.required« ustawcie na »false«.
  • Załadujcie przykłady WebExtensions ze strony http://github.com/mdn/
    webextensions-examples.
  • W folderze »webextensions-examples-master/beastify« spakujcie całą zawartość do pliku ZIP i zmieńcie nazwę z “beastify.zip” na “beasify.xpi”.
  • W wersji Nightly Firefoxa kliknijcie »File | Open File« i wybierzcie “beastify.xpi”. Ostrzeżenie skwitujcie kliknięciem »Install«.