Aktualizacja rozszerzeń dla Firefoksa 3
z Mozilla Developer Center, polskiego centrum programistów Mozilli.
Ten artykuł obejmuje funkcje wprowadzone w Firefoksie 3
UWAGA: Tłumaczenie tej strony nie zostało zakończone.
Może być ona niekompletna lub wymagać korekty.
Chcesz pomóc? | Dokończ tłumaczenie | Sprawdź ortografię | Więcej takich stron...
Ten artykuł podaje informacje użyteczne dla deweloperów, którzy chcą zaktualizować swoje rozszerzenia, by działały one prawidłowo w Firefoksie 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.
Spis treści |
[edytuj] Krok 1: Aktualizacja manifestu instalacji
Pierwszym krokiem -- dla wielu rozszerzeń jedynym, jaki będzie potrzebny -- jest aktualizacja pliku manifestu instalacji, install.rdf, aby wskazać kompatybilność z Firefoksem w wersji 3.
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 są spodziewane dalsze zmiany w Firefox 3. Te zmiany mogą zepsuć kilka rozszerzeń, więc nie powinieneś udostępniać użytkownikom rozszerzenia zmaxVersion3.0.*zanim Firefox 3 canditate release nie zostanie wypuszczony. W okresie Firefox 3 Beta powinieneś używać3.0b3jakomaxVersion.
Pewne zmiany API zostały (i nadal będą) wprowadzane. Zmiany te prawdopodobnie uszkodzą niektóre rozszerzenia. Nadal pracujemy nad kompilacją kompletnej listy tychże zmian.
Uwaga: Jeżeli twoje rozszerzenia nadal używają skryptuInstall.jszamiast manifestu instalacyjnego (install manifest), musisz natychmiast przekompilować swoje rozszerzenia do manifestu instalacyjnego. Firefox 3 nie obsługuje już skryptówinstall.jsw plikach XPI.
[edytuj] 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.
[edytuj] 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 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.
[edytuj] 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:
[edytuj] 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 importNode (lub zaadaptowanie przy użyciu metody adoptNode). Więcej informacji na temat własności 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.
[edytuj] Zakładki & Historia
Jeśli twoje rozszerzenie w jakikolwiek sposób dotyczy listy Ulubionych 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.
[edytuj] Menadżer Pobierania
W Download Manager API zmienił 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. prócz interfejsu API do monitorowania postępu pobierania został zmieniony w celu wspierania wielu słuchaczy menedżer pobierania plików.. Zobacz nsIDownloadManager, nsIDownloadProgressListener, i Monitoring downloads jak chcesz wiedzieć więcej informacji.
[edytuj] Menedżer haseł
If your extension accesses user login information using the Password Manager, it will need to be updated to use the new Login Manager API.
- Artykuł Using nsILoginManager zawiera przykłady, w tym demonstracji, w jaki sposób należy zapisać rozszerzenie do pracy zarówno z Menadżerem Haseł jak i menedżerem logowania, więc będzie działał zarówno z Firefoksa 3 jak i ze starszymi wersjami.
-
nsILoginInfo -
nsILoginManager
[edytuj] 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.
[edytuj] Removed interfaces
Następujące interfejsy zostały usunięte z Gecko 1.9. Jeśli rozszerzenie nie korzysta z zadnego z podanych, musisz uaktualizować kod:
-
nsIDOMPaintListener -
nsIDOMScrollListener -
nsIDOMMutationListener -
nsIDOMPageTransitionListener -
nsICloseAllWindows(see błąd 386200)
[edytuj] Krok 4: kilka istotnych zmian chrom
Obserwuje się 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 chromowane nakładki w stosunku do tych elementów.
Na przykład, jeśli wcześniej pokrył niektóre chromowane 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: Ta zmiana jest skuteczna dla programu Firefox w wersji beta 3 i 4 pre-beta 4 nightlies.
[edytuj] Inne zmiany
Dodanie tych prostych zmian trzeba było dokonać podczas aktualizowania rozszerzenia do przeglądarki Firefox 3.
-
nsIAboutModuleimplementacje są obecnie wymagane w celu wsparciagetURIFlagsmetody. Zobacz nsIAboutModule.idl
dla dokumentacji.
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).
- Zmiany w: nsISupports proxies [1]
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:- XML PIs are now added to a XUL document's DOM. This means
document.firstChildis no longer guaranteed to be the root element. If you need to get the root document in your script, usedocument.documentElementinstead. -
<?xml-stylesheet ?>and<?xul-overlay ?>processing instructions now have no effect outside the document prolog.
- XML PIs are now added to a XUL document's DOM. This means
-
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 usegBrowser.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 bytoString()), unlike the now deprecatedcontent.document.getSelection()which returns a string -
event.preventBubble()was deprecated in Firefox 2 and has been removed in Firefox 3. Useevent.stopPropagation(), which also works in Firefox 2 as well.