Aktualizacja rozszerzeń dla Firefoksa 3

W tym artykule znajdują się informacje dla deweloperów chcących dostosować swoje rozszerzenia do pracy w Firefox 3.

Zanim przejdziemy dalej, chcemy przedstawić jedną pomocną wskazówkę: jeśli jedyną zmianą, której wymaga twoje rozszerzenie, jest zmiana pola maxVersion w jego manifeście instalacji, i przechowujesz rozszerzenie na addons.mozilla.org, nie potrzebujesz teraz wgrywać nowej wersji swojego rozszerzenia. Po prostu użyj Developer Control Panel na AMO, by ustawić maxVersion. W ten sposób możesz uniknąć konieczności ponownego zrecenzowania rozszerzenia.

Krok 1: Zaaktualizuj manifest instalacji

Pierwszym krokiem - dla wielu rozszerzeń jedynym, jaki będzie potrzebny - jest aktualizacja pliku manifestu instalacji, install.rdf.

Wystarczy znaleźć linię wskazującą maksymalną kompatybilną wersję Firefoksa (która dla Firefoksa 2, może wyglądać podobnie jak linia poniżej):

 <em:maxVersion>2.0.0.*</em:maxVersion>

Zmieniamy ją, wskazując kompatybilność z Firefoksem w wersji 3:

 <em:maxVersion>3.0.*</em:maxVersion>

Następnie ponownie instalujemy rozszerzenie.

Zauważ, że program Firefox 3 nie potrzebuje dodatkowego ".0" w numerze wersji, tak więc zamiast "3.0.0.* możesz używać tylko "3.0.*".

Uwaga: Zauważ, że Firefox 3 nadal zmienia się. Te zmiany mogą spowodować nieprawidłowe działanie niektórych rozszerzeń, więc nie powinieneś udostępniać użytkownikom rozszerzenia z maxVersion 3.0.* zanim Firefox 3 w wersji RC nie zostanie wypuszczony. W okresie Firefox 3 Beta powinieneś używać3.0b3 jako maxVersion.

Pewne zmiany API nadal będą wprowadzane. Zmiany te prawdopodobnie zmienią działanie niektórych rodzajów rozszerzeń. Nadal pracujemy nad kompilacją kompletnej listy tychże zmian.

Uwaga: Jeżeli twoje rozszerzenia nadal używają skryptu Install.js zamiast manifestu instalacyjnego (ang. install manifest), musisz natychmiast przekompilować swoje rozszerzenia do manifestu instalacyjnego. Firefox 3 nie obsługuje już skryptów install.js w plikach XPI.

Dodawanie lokalizacji do manifestu instalacji

Firefox 3 obsługuje nowe własności w manifeście instalacji do wskazujących zlokalizowanych opisów. Stare metody nadal będą działać, jednakże nowe pozwolą Firefoksowi zebrać lokalizacje nawet gdy opcja dodatków jest wyłączona i oczekuje na instalację. Zobacz artykuł nt. lokalizacji opisu rozszerzenia, aby uzyskać więcej informacji.

Krok 2: Upewnij się, że dostarczasz bezpiecznych aktualizacji

Jeśli trzymasz rozszerzenie na własnym serwerze i nie jest to bezpieczny dostawca hostingu tak jak na przykład addons.mozilla.org to musisz zapewnić bezpieczną metodę aktualizacji Twojego dodatku. This will either involve hosting your updates on an SSL website, or using cryptographic keys to sign the update information. Przeczytaj artykuł Securing Updates, aby zdobyć więcej informacji.

Krok 3: Uporaj się ze zmianami w API

Kilka API zostało zmienione w znaczny sposób. Najbardziej zmienione, które najprawdopodobniej będą miały wpływ na duża liczbę rozszerzeń, to:

DOM

Przed włączeniem węzłów pochodzących z zewnętrznych dokumentów do bieżącego dokumentu konieczne jest ich sklonowanie za pomocą metody document.importNode() (lub zaadaptowanie przy użyciu metody document.adoptNode()). Więcej informacji na temat własności Node.ownerDocument znajduje się na liście najczęściej zadawanych pytań na temat DOM w witrynie W3C.

Aktualnie Firefox nie wymusza tej reguły (robił to przez pewien czas podczas cykli rozwojowych Firefoksa 3, ale zbyt dużo stron przestawało działać po wymuszeniu tej reguły). Zachęcamy autorów stron do poprawienia ich kodu dla lepszej kompatybilności w przyszłości.

Zakładki & Historia

Jeśli twoje rozszerzenie w jakikolwiek sposób dotyczy listy Zakładek lub Historii, będzie ono wymagało dodatkowych zmian, aby poprawnie działać z Firefoksem 3. Stare API dla tych list zostało zastąpione nową architekturą Miejsca. Zobacz Migration Guide for Places, by uzyskać szczegóły aktualizacji.

Menadżer pobierania

API Menedżera pobierania zmieniło się nieznacznie ze względu na przejście z RDF do przechowywania danych za pomocą Storage API. To powinno być dość łatwe do przejścia. Interfejs API do monitorowania postępu pobierania został zmieniony w celu wspierania wielu czytników Menedżera pobierania. W celu zdobycia większej liczby informacji, idź do nsIDownloadManager, nsIDownloadProgressListener i Monitoring downloads.

Menadżer haseł

Jeśli twoje rozszerzenie wykorzystuje Menadżer haseł do logowania użytkownika, konieczne będzie dostosowanie się do nowego API Menedżera logowania.

  • Artykuł Using nsILoginManager zawiera przykłady w jaki sposób należy zapisać rozszerzenie do pracy zarówno z Menadżerem haseł jak i Menadżerem logowania, więc będzie działał zarówno z Firefoksa 3 jak i ze starszymi wersjami.
  • nsILoginInfo
  • nsILoginManager

Popups (menu, menu kontekstowe, podpowiedzi i paneli)

XUL Popup system został mocno zmodyfikowany w Firefoksie 3. Popup System zawiera główne menu, menu kontekstowego i pop-panele. Przewodnik za pomocą Popups została utworzona, dowiedzą się jak działa system. Jedną rzeczą jest, aby zapamiętać, że using Popups popup.showPopup popup.został wycofany na rzecz nowychopenPopup i popup.openPopupAtScreen.

Usunięte interfejsy

Następujące interfejsy zostały usunięte z Gecko 1.9. Jeśli rozszerzenie korzysta z któregoś z podanych, musisz zaaktualizować kod:

  • nsIDOMPaintListener
  • nsIDOMScrollListener
  • nsIDOMMutationListener
  • nsIDOMPageTransitionListener
  • nsICloseAllWindows (zobacz błąd 386200)

Krok 4: Kilka istotnych zmian chrome

Nastąpiły niewielkie zmiany w chrome, które mogą wymagać zmian w kodzie. Nowy vbox został dodany, tak zwany " bottombox przeglądarki", który załącza się w pasku górnym i pasku stanu na dole okna przeglądarki. Chociaż nie ma to wpływu na wygląd wyświetlacza, może wpłynąć na rozszerzenie czy chrome nakładki w stosunku do tych elementów.

Na przykład, jeśli wcześniej pokrył niektóre chrome sprzed pasku stanu, w taki sposób:

<window id="main-window">
  <something insertbefore="status-bar" />
</window>


Teraz nakładka powinna wyglądać w taki sposób:

<vbox id="browser-bottombox">
  <something insertbefore="status-bar" />
</vbox>

Uwaga: Zmiana została wprowadzona w Firefox w wersjach beta 3 i 4 pre-beta 4 nightlies.

Inne zmiany

Dotyczy to rozszerzenia, które zapewniają nowe URI.(błąd 337746)

element nie jest już częścią "narzędzi" (błąd 339964). Oznacza to, że ten element nie jest już dostępny w aplikacjach XUL i rozszerzeniach. To nadal jest używany w oknie głównym programu Firefox (browser.xul).

i ewentualnie do gwintowania związanych interfejsów muszą być udokumentowane.

  • Jeśli korzystasz z instrukcji przetwarzania XML, takich jak<?xml-stylesheet ?> w Twoim plików XUL, powinnismy być świadomi zmian dokonanych w błąd 319654:
    1. XML PIs are now added to a XUL document's DOM. This means document.firstChild is no longer guaranteed to be the root element. If you need to get the root document in your script, use document.documentElement instead.
    2. <?xml-stylesheet ?> and <?xul-overlay ?> processing instructions now have no effect outside the document prolog.
  • window.addEventListener("load", myFunc, true) is not fired when loading web content (browser page loads). This is due to błąd 296639 which changes the way inner and outer windows communicate. The simple fix here is to use gBrowser.addEventListener("load", myFunc, true) as described here and works in Firefox 2 as well.
  • content.window.getSelection() gives an object (which can be converted to a string by toString()), unlike the now deprecated content.document.getSelection() which returns a string
  • event.preventBubble() was deprecated in Firefox 2 and has been removed in Firefox 3. Use event.stopPropagation(), which also works in Firefox 2 as well.

Autorzy i etykiety dokumentu

Etykiety: 
Ostatnia aktualizacja: fscholz,