Często zadawane pytania dotyczące rozszerzeń

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.

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.

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.

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.

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);

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.

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

Częstą przyczyną błędów przetwarzania (oznaczanych <font color="red">czerwonym tekstem</font> i znakami <font color="red">-------------^</font> 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"/>

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.

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ń!

Autorzy i etykiety dokumentu

Autorzy tej strony: Flaneur, Yozh88, Jules Papillon
Ostatnia aktualizacja: Yozh88,