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¶metr2=wartosc2')"/>
lub
<script>function lesser(a,b) { return a < b ? a : b; }</script>
Problem można rozwiązać na jeden z podanych sposobów:
- Zastąpić dany znak jego wersją, która nie powoduje konfliktu w kodzie XML (np.: "&" -> "&", "<" -> "<")
- 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> - 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ń!