Visit Mozilla.org

Często zadawane pytania dotyczące rozszerzeń

z Mozilla Developer Center, polskiego centrum programistów Mozilli.


W tym artykule przedstawiono rozwiązania kilku najczęściej spotykanych problemów związanych z programowaniem rozszerzeń. Dotyczą one przede wszystkim przeglądarki Firefox, ale co najmniej większość z nich może zostać zastosowana w programach SeaMonkey, Thunderbird i innych aplikacjach Mozilli.

Jeżeli dopiero zaczynasz programowanie rozszerzeń, zapoznaj się z poradnikiem Tworzymy rozszerzenie lub artykułem Wprowadzenie do programowania rozszerzeń dostępnym w witrynie MozillaZine. Aby utworzyć szablon rozszerzenia, który będzie można potem rozbudować i dostosować do własnych potrzeb, skorzystaj z Kreatora rozszerzeń.

Nie zapomnij o przygotowaniu środowiska programowania rozszerzenia.

Spis treści

[edytuj] Debugowanie

Przed rozpoczęciem debugowania rozszerzenia należy przygotować środowisko programowania rozszerzenia.

Debuger języka JavaScript Venkman może być przydatnym narzędziem analizy skomplikowanego kodu; korzystając z niego, należy pamiętać o wyłączeniu opcji "Debug -> Exclude Browser Files" podczas pracy nad kodem rozszerzenia.

[edytuj] Jak wyświetlić błędy w moim kodzie?

Po ustawieniu wartości true dla preferencji javascript.options.showInConsole komunikaty o błędach będą wyświetlane w Konsoli błędów. Rejestrowanie wszystkich błędów JavaScript w konsoli znacznie ułatwia odnalezienie błędów w tworzonym kodzie.

[edytuj] Jak sprawdzić, jakie operacje wykonuje moje rozszerzenie?

Do wyświetlania wartości zmiennych i debugowania tekstu można skorzystać z metod alert(), dump() i Components.utils.reportError() oraz interfejsu usługi konsoli. Można także zainstalować dodatek debugera JavaScript Venkman.

[edytuj] Dlaczego mój skrypt nie działa poprawnie?

Jeżeli skrypt nie działa w oczekiwany sposób, najpierw należy sprawdzić Konsolę błędów (patrz wyżej).

Jednym z powszechnie popełnianych błędów jest próba uzyskania dostępu do obiektu DOM okna przed pełnym załadowaniem go przez przeglądarkę. Sytuacja ta występuje wówczas, gdy kod inicjalizujący jest umieszczony na najwyższym poziomie w skrypcie (tzn. nie znajduje się wewnątrz żadnej funkcji). Rozwiązaniem jest użycie obserwatora zdarzenia load (ang. event listener) w celu opóźnienia wykonania kodu do momentu zakończenia ładowania danych w oknie:

function exampleBrowserStartup(event)
{
  // tutaj należy umieścić kod wykonywany na początku skryptu
}
window.addEventListener("load", exampleBrowserStartup, false);

[edytuj] Nie można uzyskać dostępu do obiektu document bieżącej strony

Aby uzyskać dostęp do obiektu document bieżącej strony z poziomu nakładki browser.xul, należy użyć obiektu content.document — obiekt document odnosi się bowiem do obiektu document okna przeglądarki. Więcej informacji można znaleźć w artykule Korzystanie z okien w kodzie chrome.

Ponadto obiekt XPCNativeWrapper domyślnie blokuje między innymi dostęp do obiektów zdefiniowanych przez skrypty działające na stronie internetowej.

[edytuj] Wystąpił błąd przetwarzania kodu XML, ale plik wygląda na poprawny

Częstą przyczyną błędów przetwarzania (oznaczanych czerwonym tekstem i znakami -------------^ znajdującymi się pod błędnym kodem) są znaki & i < umieszczone w skrypcie lub w wartości atrybutu. Znaki te mają specjalne znaczenie w języku XML. Oto przykład:

<button oncommand="window.open('http://przykladowastrona.pl/q?parametr1=wartosc&parametr2=wartosc2')"/>

lub

<script>function lesser(a,b) { return a < b ? a : b; }</script>

Problem można rozwiązać na jeden z podanych sposobów:

  1. Zastąpić dany znak jego wersją, która nie powoduje konfliktu w kodzie XML (np.: "&" -> "&amp;", "<" -> "&lt;")
  2. W przypadku użycia znaków w węźle tekstowym, takim jak skrypt, umieścić znaczniki CDATA na początku i na końcu kodu:
    <script><![CDATA[
       function lesser(a,b) {
         return a < b ? a : b;
       }
     ]]></script>
  3. Umieścić kod skryptu w osobnym pliku i dołączyć ten plik, korzystając ze znacznika script:
    <script type="application/x-javascript" src="mojskrypt.js"/>

[edytuj] Przykładowy kod

Najprostszym sposobem utworzenia kodu wykonującego daną operację jest znalezienie rozszerzenia (lub części samej Mozilli) wykonującego tę operację i analiza jego kodu. (Pliki XPI i JAR to archiwa w formacie ZIP ze zmienionym rozszerzeniem pliku).

Dostępna jest także dokumentacja: lista artykułów MDC dotyczących tworzenia rozszerzeń, Fragmenty kodu oraz Przykłady kodu w witrynie MozillaZine.

[edytuj] Gdzie mogę uzyskać dodatkową pomoc?

Zobacz Rozszerzenia:Inne zasoby i Rozszerzenia:Społeczność.

Zanim poprosisz o pomoc, upewnij się, czy preferencje dotyczące debugowania są ustawione prawidłowo i czy sprawdzono odpowiednie komunikaty w Konsoli błędów. Nie zapomnij także o przeszukaniu Internetu przed zadaniem pytania. I oczywiście zapoznaj się z niniejszą listą często zadawanych pytań!