1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
---
title: Często zadawane pytania dotyczące rozszerzeń
slug: Często_zadawane_pytania_dotyczące_rozszerzeń
tags:
- Dodatki
- Rozszerzenia
- Wszystkie_kategorie
translation_of: Archive/Mozilla/Extension_Frequently_Asked_Questions
---
<p>
</p><p>W tym artykule przedstawiono rozwiązania kilku najczęściej spotykanych problemów związanych z programowaniem <a href="pl/Rozszerzenia">rozszerzeń</a>. 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.
</p><p>Jeżeli dopiero zaczynasz programowanie rozszerzeń, zapoznaj się z poradnikiem <a href="pl/Tworzymy_rozszerzenie">Tworzymy rozszerzenie</a> lub artykułem <a class="external" href="http://kb.mozillazine.org/Getting_started_with_extension_development">Wprowadzenie do programowania rozszerzeń</a> 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 <a class="external" href="http://ted.mielczarek.org/code/mozilla/extensionwiz/">Kreatora rozszerzeń</a>.
</p><p>Nie zapomnij o <a href="pl/Przygotowanie_%c5%9brodowiska_programowania_rozszerzenia">przygotowaniu środowiska programowania rozszerzenia</a>.
</p>
<h3 id="Debugowanie" name="Debugowanie"> Debugowanie </h3>
<p>Przed rozpoczęciem debugowania rozszerzenia należy <a href="pl/Przygotowanie_%c5%9brodowiska_programowania_rozszerzenia">przygotować środowisko programowania rozszerzenia</a>.
</p><p>Debuger języka JavaScript <a href="pl/Venkman">Venkman</a> 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.
</p>
<h4 id="Jak_wy.C5.9Bwietli.C4.87_b.C5.82.C4.99dy_w_moim_kodzie.3F" name="Jak_wy.C5.9Bwietli.C4.87_b.C5.82.C4.99dy_w_moim_kodzie.3F"> Jak wyświetlić błędy w moim kodzie? </h4>
<p>Po <a href="pl/Przygotowanie_%c5%9brodowiska_programowania_rozszerzenia">ustawieniu wartości <b>true</b> dla preferencji <b>javascript.options.showInConsole</b></a> komunikaty o błędach będą wyświetlane w <a href="pl/Konsola_b%c5%82%c4%99d%c3%b3w">Konsoli błędów</a>. Rejestrowanie wszystkich błędów JavaScript w konsoli znacznie ułatwia odnalezienie błędów w tworzonym kodzie.
</p>
<h4 id="Jak_sprawdzi.C4.87.2C_jakie_operacje_wykonuje_moje_rozszerzenie.3F" name="Jak_sprawdzi.C4.87.2C_jakie_operacje_wykonuje_moje_rozszerzenie.3F"> Jak sprawdzić, jakie operacje wykonuje moje rozszerzenie? </h4>
<p>Do wyświetlania wartości zmiennych i debugowania tekstu można skorzystać z metod <code><a href="pl/DOM/window.alert">alert()</a></code>, <code><a href="pl/DOM/window.dump">dump()</a></code> i <code><a href="pl/Components.utils.reportError">Components.utils.reportError()</a></code> oraz <a href="pl/NsIConsoleService">interfejsu usługi konsoli</a>. Można także zainstalować <a class="link-https" href="https://addons.mozilla.org/en-US/firefox/216">dodatek debugera JavaScript Venkman</a>.
</p>
<h4 id="Dlaczego_m.C3.B3j_skrypt_nie_dzia.C5.82a_poprawnie.3F" name="Dlaczego_m.C3.B3j_skrypt_nie_dzia.C5.82a_poprawnie.3F"> Dlaczego mój skrypt nie działa poprawnie? </h4>
<p>Jeżeli skrypt nie działa w oczekiwany sposób, najpierw należy sprawdzić Konsolę błędów (patrz <a href="#Jak_wy.C5.9Bwietli.C4.87_b.C5.82.C4.99dy_w_moim_kodzie.3F">wyżej</a>).
</p><p>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 <code>load</code> (ang. <i>event listener</i>) w celu opóźnienia wykonania kodu do momentu zakończenia ładowania danych w oknie:
</p>
<pre class="eval">function exampleBrowserStartup(event)
{
// tutaj należy umieścić kod wykonywany na początku skryptu
}
window.addEventListener("load", exampleBrowserStartup, false);
</pre>
<h4 id="Nie_mo.C5.BCna_uzyska.C4.87_dost.C4.99pu_do_obiektu_document_bie.C5.BC.C4.85cej_strony" name="Nie_mo.C5.BCna_uzyska.C4.87_dost.C4.99pu_do_obiektu_document_bie.C5.BC.C4.85cej_strony"> Nie można uzyskać dostępu do obiektu <code>document</code> bieżącej strony </h4>
<p>Aby uzyskać dostęp do obiektu <code>document</code> bieżącej strony z poziomu nakładki <code>browser.xul</code>, należy użyć obiektu <code>content.document</code> — obiekt <code>document</code> odnosi się bowiem do obiektu <code>document</code> okna przeglądarki. Więcej informacji można znaleźć w artykule <a href="pl/Korzystanie_z_okien_w_kodzie_chrome#Okna_zawarto.C5.9Bci">Korzystanie z okien w kodzie chrome</a>.
</p><p>Ponadto obiekt <a href="pl/XPCNativeWrapper">XPCNativeWrapper</a> domyślnie blokuje między innymi dostęp do obiektów zdefiniowanych przez skrypty działające na stronie internetowej.
</p>
<h4 id="Wyst.C4.85pi.C5.82_b.C5.82.C4.85d_przetwarzania_kodu_XML.2C_ale_plik_wygl.C4.85da_na_poprawny" name="Wyst.C4.85pi.C5.82_b.C5.82.C4.85d_przetwarzania_kodu_XML.2C_ale_plik_wygl.C4.85da_na_poprawny"> Wystąpił błąd przetwarzania kodu XML, ale plik wygląda na poprawny </h4>
<p>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:
</p>
<pre class="eval"><button oncommand="window.open('<span class="nowiki">http://przykladowastrona.pl/</span>q?parametr1=wartosc<b>&parametr2</b>=wartosc2')"/>
</pre>
<p>lub
</p>
<pre class="eval"><script>function lesser(a,b) { return <b>a < b</b> ? a : b; }</script>
</pre>
<p>Problem można rozwiązać na jeden z podanych sposobów:
</p>
<ol>
<li>Zastąpić dany znak jego wersją, która nie powoduje konfliktu w kodzie XML (np.: "&" -> "&amp;", "<" -> "&lt;")</li>
<li>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:
<pre><script><![CDATA[
function lesser(a,b) {
return a < b ? a : b;
}
]]></script></pre>
</li>
<li>Umieścić kod skryptu w osobnym pliku i dołączyć ten plik, korzystając ze znacznika <code>script</code>:
<pre><script type="application/x-javascript" src="mojskrypt.js"/></pre>
</li></ol>
<h3 id="Przyk.C5.82adowy_kod" name="Przyk.C5.82adowy_kod"> Przykładowy kod </h3>
<p>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). </p><p>Dostępna jest także dokumentacja: <a>lista artykułów MDC dotyczących tworzenia rozszerzeń</a>, <a href="pl/Fragmenty_kodu">Fragmenty kodu</a> oraz <a class="external" href="http://kb.mozillazine.org/Category:Example_code">Przykłady kodu w witrynie MozillaZine</a>.
</p>
<h3 id="Gdzie_mog.C4.99_uzyska.C4.87_dodatkow.C4.85_pomoc.3F" name="Gdzie_mog.C4.99_uzyska.C4.87_dodatkow.C4.85_pomoc.3F"> Gdzie mogę uzyskać dodatkową pomoc? </h3>
<p>Zobacz <a href="pl/Rozszerzenia/Inne_zasoby">Rozszerzenia:Inne zasoby</a> i <a href="pl/Rozszerzenia/Spo%c5%82eczno%c5%9b%c4%87">Rozszerzenia:Społeczność</a>.
</p><p>Zanim poprosisz o pomoc, upewnij się, czy <a href="#Debugowanie">preferencje dotyczące debugowania</a> są ustawione prawidłowo i czy <a href="#Jak_wy.C5.9Bwietli.C4.87_b.C5.82.C4.99dy_w_moim_kodzie.3F">sprawdzono odpowiednie komunikaty w Konsoli błędów</a>. Nie zapomnij także o przeszukaniu Internetu przed zadaniem pytania. I oczywiście zapoznaj się z niniejszą listą często zadawanych pytań!
</p>{{ languages( { "de": "de/Erweiterungen_FAQ", "en": "en/Extension_Frequently_Asked_Questions", "es": "es/Preguntas_frecuentes_sobre_Extensiones", "fr": "fr/Foire_aux_questions_sur_les_extensions", "it": "it/Domande_frequenti_sulle_Estensioni", "ja": "ja/Extension_Frequently_Asked_Questions", "ru": "ru/FAQ_\u043f\u043e_\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c" } ) }}
|