aboutsummaryrefslogtreecommitdiff
path: root/files/pl/xpcnativewrapper/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/pl/xpcnativewrapper/index.html')
-rw-r--r--files/pl/xpcnativewrapper/index.html208
1 files changed, 208 insertions, 0 deletions
diff --git a/files/pl/xpcnativewrapper/index.html b/files/pl/xpcnativewrapper/index.html
new file mode 100644
index 0000000000..24e09990fa
--- /dev/null
+++ b/files/pl/xpcnativewrapper/index.html
@@ -0,0 +1,208 @@
+---
+title: XPCNativeWrapper
+slug: XPCNativeWrapper
+tags:
+ - Bezpieczeństwo
+ - DOM
+ - Dodatki
+ - Rozszerzenia
+ - Wszystkie_kategorie
+ - XPCNativeWrapper
+translation_of: Mozilla/Tech/Xray_vision
+---
+<p>
+</p><p>Obiekt <code>XPCNativeWrapper</code> służy do <a href="pl/Obiekty_opakowuj%c4%85ce_w_XPConnect">opakowania</a> obiektu, tak aby można było uzyskać do niego <a href="pl/Bezpieczny_dost%c4%99p_do_sk%c5%82adnik%c3%b3w_DOM_z_poziomu_chrome">dostęp w bezpieczny sposób z poziomu kodu uprzywilejowanego</a>. Można z niego korzystać we wszystkich wersjach Firefoksa, przy czym jego działanie zostało nieco zmienione w wersji 1.5 (Gecko 1.8) i nowszych. Informacje na temat działania obiektu <code>XPCNativeWrapper</code> w wersjach Firefoksa starszych niż 1.5 można znaleźć w <a class="external" href="http://kb.mozillazine.org/XPCNativeWrapper">artykule <code>XPCNativeWrapper</code> w bazie wiedzy witryny MozillaZine</a>. W niniejszym dokumencie opisano działanie obiektu <code>XPCNativeWrapper</code> w programie Firefox w wersji 1.5 i nowszych.
+</p>
+<h3 id="Jak_dzia.C5.82a_obiekt_XPCNativeWrapper" name="Jak_dzia.C5.82a_obiekt_XPCNativeWrapper"> Jak działa obiekt <code>XPCNativeWrapper</code> </h3>
+<p>Obiekt <code>XPCNativeWrapper</code> ogranicza dostęp do własności i metod obiektu, który jest przez niego opakowany. Za pośrednictwem obiektu <code>XPCNativeWrapper</code> dostępne są tylko te własności i metody, które zdefiniowano w specyfikacji IDL (Interface Definition Language, język definicji interfejsów) lub w specyfikacji DOM Level 0 (przy czym niektóre własności i metody DOM Level 0 <a href="#Ograniczenia_w_korzystaniu_z_obiektu_XPCNativeWrapper">nie działają w odniesieniu do obiektu <code>XPCNativeWrapper</code></a>). Obiekt <code>XPCNativeWrapper</code> nie udostępnia przede wszystkim własności dodanych do opakowanego obiektu za pomocą kodu JavaScript ani metod pobierania i ustawiania zdefiniowanych za pomocą metod <code>__defineGetter__</code> oraz <code>__defineSetter__</code>. W rezultacie możliwy jest bezpieczny dostęp do metod obiektu zdefiniowanych w specyfikacji IDL. </p><p>Należy koniecznie zapoznać się z sekcją <a href="#Znane_b.C5.82.C4.99dy">Znane błędy</a>, zwłaszcza w przypadku pisania kodu przeznaczonego do działania w wydaniach Firefoksa z serii 1.5.0.x.
+</p>
+<h3 id="Typy_obiektu_XPCNativeWrapper" name="Typy_obiektu_XPCNativeWrapper"> Typy obiektu <code>XPCNativeWrapper</code> </h3>
+<p>W programie Firefox 1.5 istnieją trzy typy obiektu <code>XPCNativeWrapper</code>. Wszystkie służą do opakowania potencjalnie niezabezpieczonych obiektów i <a href="#Jak_dzia.C5.82a_obiekt_XPCNativeWrapper">umożliwiają bezpieczny dostęp do własności i metod tych obiektów</a>.
+</p><p>O różnicach w działaniu między trzema typami obiektu <code>XPCNativeWrapper</code> decydują dwie cechy, jakie może mieć obiekt opakowujący <code>XPCNativeWrapper</code>. Obiekt <code>XPCNativeWrapper</code> może być <a href="#Obiekty_jawne_.28explicit.29_i_niejawne_.28implicit.29"><i>jawny</i></a> (lub odwrotnie: <i>niejawny</i>) albo też <a href="#Obiekty_g.C5.82.C4.99bokie_.28deep.29_i_p.C5.82ytkie_.28shallow.29"><i>głęboki</i></a> (lub odwrotnie: <i>płytki</i>). Typ tworzonego obiektu opakowującego jest określany przez <a href="#Tworzenie_obiekt.C3.B3w_XPCNativeWrapper">sposób jego utworzenia</a>:
+</p>
+<table class="standard-table">
+<tbody><tr>
+<th> Utworzony przez
+</th><th> Jawny/niejawny
+</th><th> Głęboki/płytki
+</th></tr>
+<tr>
+<th> <a href="#Dost.C4.99p_do_niezaufanego_obiektu_z_poziomu_chronionego_skryptu">Chroniony skrypt uzyskujący dostęp do niezaufanego obiektu</a>
+</th><td> Niejawny
+</td><td> Głęboki
+</td></tr>
+<tr>
+<th> <a href="#Wywo.C5.82anie_konstruktora_obiektu_XPCNativeWrapper_z_argumentami_typu_String">Konstruktor wywołany z argumentami typu <code>String</code></a>
+</th><td> Jawny
+</td><td> Płytki
+</td></tr>
+<tr>
+<th> <a href="#Wywo.C5.82anie_konstruktora_obiektu_XPCNativeWrapper_bez_argument.C3.B3w_typu_String">Konstruktor wywołany bez argumentów typu <code>String</code></a>
+</th><td> Jawny
+</td><td> Głęboki
+</td></tr></tbody></table>
+<h4 id="Obiekty_jawne_.28explicit.29_i_niejawne_.28implicit.29" name="Obiekty_jawne_.28explicit.29_i_niejawne_.28implicit.29"> Obiekty jawne (<i>explicit</i>) i niejawne (<i>implicit</i>) </h4>
+<p>Różnica w działaniu jawnych i niejawnych obiektów <code>XPCNativeWrapper</code> polega na dostępie do własności opakowanego obiektu: w przypadku obiektów niejawnych dostęp z poziomu skryptu, który nie jest <a href="#Co_to_jest_skrypt_chroniony.3F">chroniony</a>, NIE jest bezpieczny. Żądania dostępu do własności opakowanego obiektu są wówczas przekazywane do własności <code>wrappedJSObject</code> obiektu <code>XPCNativeWrapper</code>.
+</p><p>Oznacza to, że w skryptach, które nie są <a href="#Co_to_jest_skrypt_chroniony.3F">chronione</a>, nie trzeba zajmować się możliwością wystąpienia błędów, ponieważ do skryptów tych przekazywane są niejawne obiekty <code>XPCNativeWrapper</code>. Z drugiej strony w skryptach tego rodzaju należy przewidzieć możliwość niezabezpieczonego dostępu do obiektu.
+</p><p>Dostęp do własności jawnego obiektu <code>XPCNativeWrapper</code> jest zawsze bezpieczny, niezależnie od tego, czy wywołujący skrypt jest <a href="#Co_to_jest_skrypt_chroniony.3F">chroniony</a>.
+</p>
+<h4 id="Obiekty_g.C5.82.C4.99bokie_.28deep.29_i_p.C5.82ytkie_.28shallow.29" name="Obiekty_g.C5.82.C4.99bokie_.28deep.29_i_p.C5.82ytkie_.28shallow.29"> Obiekty głębokie (<i>deep</i>) i płytkie (<i>shallow</i>) </h4>
+<p>Różnica w działaniu głębokich i płytkich obiektów <code>XPCNativeWrapper</code> jest następująca: przy próbie dostępu do własności głębokiego obiektu opakowującego lub wywołaniu funkcji tego obiektu zwracana wartość jest również opakowana przez obiekt <code>XPCNativeWrapper</code>. Ten nowy obiekt <code>XPCNativeWrapper</code> jest także obiektem głębokim. Jest również <a href="#Obiekty_jawne_.28explicit.29_i_niejawne_.28implicit.29">jawny</a> tylko jeżeli obiekt <code>XPCNativeWrapper</code>, do którego własności uzyskiwano dostęp, jest obiektem jawnym. Natomiast przy próbie dostępu do własności płytkiego obiektu opakowującego lub wywołaniu funkcji tego obiektu zwracana wartość może być obiektem niezabezpieczonym.
+</p><p>Załóżmy, że dla tego samego obiektu <code>window</code> istnieją trzy instancje obiektów <code>XPCNativeWrapper</code>. Nazwijmy je <code>deepExplicitWindow</code>, <code>deepImplicitWindow</code> i <code>shallowWindow</code>:
+</p>
+<pre class="eval">var doc1 = deepExplicitWindow.document;
+// Zmienna doc1 jest teraz głębokim jawnym obiektem XPCNativeWrapper
+// opakowującym obiekt document. Wywołanie na przykład metody
+// doc1.open() jest bezpieczne.
+</pre>
+<pre class="eval">var doc2 = deepImplicitWindow.document;
+// Jeżeli w skrypcie wywołującym ustawiono parametr xpcnativewrappers=yes,
+// zmienna doc2 jest teraz głębokim niejawnym obiektem XPCNativeWrapper
+// opakowującym obiekt document.
+// W przeciwnym przypadku zmienna doc2 jest teraz niezabezpieczonym obiektem
+// document, ponieważ żądanie dostępu do własności zostało po prostu
+// przekazane do niezabezpieczonego obiektu window.
+</pre>
+<pre class="eval">var doc3 = shallowWindow.document;
+// Zmienna doc3 jest teraz niezabezpieczonym obiektem document.
+</pre>
+<h3 id="Tworzenie_obiekt.C3.B3w_XPCNativeWrapper" name="Tworzenie_obiekt.C3.B3w_XPCNativeWrapper"> Tworzenie obiektów <code>XPCNativeWrapper</code> </h3>
+<p>Istnieją trzy różne sposoby tworzenia obiektów <code>XPCNativeWrapper</code> — po jednym dla każdego z trzech typów.
+</p>
+<h4 id="Dost.C4.99p_do_niezaufanego_obiektu_z_poziomu_chronionego_skryptu" name="Dost.C4.99p_do_niezaufanego_obiektu_z_poziomu_chronionego_skryptu"> Dostęp do niezaufanego obiektu z poziomu chronionego skryptu </h4>
+<p>Za każdym razem, kiedy <a href="#Co_to_jest_skrypt_chroniony.3F">skrypt chroniony</a> uzyskuje dostęp do <a href="#Co_to_jest_obiekt_niezaufany.3F">obiektu niezaufanego</a>, zwracany jest <a href="#Obiekty_jawne_.28explicit.29_i_niejawne_.28implicit.29">niejawny</a> <a href="#Obiekty_g.C5.82.C4.99bokie_.28deep.29_i_p.C5.82ytkie_.28shallow.29">głęboki</a> obiekt <code>XPCNativeWrapper</code>. Dostęp do własności takiego obiektu <code>XPCNativeWrapper</code> z poziomu <a href="#Co_to_jest_skrypt_chroniony.3F">skryptu chronionego</a> jest bezpieczny.
+</p><p>Utworzony w ten sposób obiekt opakowujący pozostaje dostępny, dopóki istnieje opakowywany obiekt. Przy dwukrotnej próbie dostępu do obiektu w jednym wierszu kodu zwrócony zostanie ten sam obiekt <code>XPCNativeWrapper</code>.
+</p>
+<h5 id="Co_to_jest_skrypt_chroniony.3F" name="Co_to_jest_skrypt_chroniony.3F"> Co to jest skrypt chroniony? </h5>
+<p>W wersjach programu Firefox od 1.5 do 1.5.0.5 ochrona skryptu lub jej brak zależy wyłącznie od identyfikatora URI skryptu. Skrypt jest chroniony tylko jeżeli jego identyfikator URI rozpoczyna się prefiksem zdefiniowanym jako chroniony; skrypty ładowane w inny sposób niż przez identyfikator URI (np. komponenty implementowane za pomocą kodu JavaScript) nie są chronione. Prefiksy chronione w programie Firefox są określone w Rejestrze Chrome.
+</p><p>Domyślnie <b>wszystkie pakiety składników oprogramowania (<i>content</i>) są chronione</b>. Oznacza to, że każdy identyfikator URI rozpoczynający się ciągiem "&lt;tt&gt;<a class=" external" rel="freelink">chrome://</a>&lt;nazwa pakietu&gt;/content/&lt;/tt&gt;" (niezależnie od pakietu) jest chroniony. W poszczególnych pakietach można <a href="pl/Rejestracja_Chrome#xpcnativewrappers">zmienić tę konfigurację, ustawiając odpowiedni znacznik</a> w pliku manifestu chrome.
+</p><p>Począwszy od wersji 1.5.0.6 Firefoksa, komponenty zaimplementowane za pomocą kodu JavaScript są skryptami chronionymi. Skrypt jest więc chroniony zarówno wówczas, gdy jest załadowany przez identyfikator URI rozpoczynający się chronionym prefiksem, jak i wtedy, gdy jest komponentem zaimplementowanym za pomocą kodu JavaScript.
+</p>
+<h5 id="Co_to_jest_obiekt_niezaufany.3F" name="Co_to_jest_obiekt_niezaufany.3F"> Co to jest obiekt niezaufany? </h5>
+<p>Każdy obiekt może być zaufany lub niezaufany. Obiekt jest zaufany, gdy spełniony jest przynajmniej jeden z poniższych warunków:
+</p>
+<ol><li> Jego rodzic (własność <code>__parent__</code> w języku JavaScript) jest obiektem zaufanym.
+</li><li> Jest to obiekt zakresu nadrzędnego w komponencie JavaScript.
+</li><li> Jest to obiekt <code>window</code> <a href="#Co_to_jest_okno_zaufane.3F">okna zaufanego</a>.
+</li></ol>
+<p>Ponieważ w przypadku wszystkich obiektów DOM w oknie ich własność <code>__parent__</code> zawierać będzie obiekt <code>window</code> tego okna, będą one zaufane jedynie wówczas, gdy okno, w którym się znajdują, jest zaufane.
+</p>
+<h5 id="Co_to_jest_okno_zaufane.3F" name="Co_to_jest_okno_zaufane.3F"> Co to jest okno zaufane? </h5>
+<p>Zaufanie do okna zależne jest od zawierającego je kontenera. Okno jest zaufane, gdy spełniony jest przynajmniej jeden z poniższych warunków:
+</p>
+<ol><li> Jest to okno najwyższego poziomu (np. <code>&lt;xul:window&gt;</code>, <code>&lt;xul:dialog&gt;</code> lub identyfikator URI przekazany do argumentu &lt;tt&gt;-chrome&lt;/tt&gt; wiersza polecenia).
+</li><li> Rodzic okna jest zaufany oraz spełniony jest jeden z trzech warunków:
+<ol><li> Okno nie jest załadowane w obiekcie <code>&lt;xul:iframe&gt;</code> ani <code>&lt;xul:browser&gt;</code>.
+</li><li> Ładujący okno obiekt <code>&lt;xul:iframe&gt;</code> lub <code>&lt;xul:browser&gt;</code> nie ma atrybutu "type".
+</li><li> Wartość atrybutu "type" obiektu <code>&lt;xul:iframe&gt;</code> lub <code>&lt;xul:browser&gt;</code> ładującego okno nie jest równa "content" ani nie rozpoczyna się od ciągu znaków "content-".
+</li></ol>
+</li></ol>
+<p>Uwaga: to, czy okno jest zaufane, <b>nie</b> zależy od identyfikatora URI załadowanego w tym oknie. Dlatego jeżeli kod z poniższego przykładu zostanie wykonany w dokumencie, którego okno jest już zaufane, zostaną utworzone okna zaufane:
+</p>
+<ul><li> <code>&lt;xul:browser&gt;</code>
+</li><li> <code>&lt;xul:browser type="chrome"&gt;</code>
+</li><li> <code>&lt;xul:browser type="wsciekly_pies"&gt;</code>
+</li><li> <code>&lt;xul:iframe type="costam"&gt;</code>
+</li><li> <code>&lt;html:iframe&gt;</code>
+</li><li> <code>&lt;html:iframe type="content"&gt;</code>
+</li></ul>
+<p>Z kolei wykonanie poniższego kodu nie spowoduje utworzenia okien zaufanych:
+</p>
+<ul><li> <code>&lt;xul:browser type="content"&gt;</code>
+</li><li> <code>&lt;xul:iframe type="content-primary"&gt;</code>
+</li></ul>
+<p>Należy także zauważyć, że każde okno potomne okna niezaufanego automatycznie staje się niezaufane.
+</p>
+<h5 id="Co_dzieje_si.C4.99.2C_gdy_skrypt_uzyskuje_dost.C4.99p_do_obiektu.3F" name="Co_dzieje_si.C4.99.2C_gdy_skrypt_uzyskuje_dost.C4.99p_do_obiektu.3F"> Co dzieje się, gdy skrypt uzyskuje dostęp do obiektu? </h5>
+<p>W poniższej tabeli opisano, co dzieje się, gdy skrypt uzyskuje dostęp do obiektu i jaka jest rola obiektu opakowującego.
+</p>
+<table class="standard-table">
+<tbody><tr>
+<th> Skrypt
+</th><th> Obiekt
+</th><th> Rezultaty
+</th></tr>
+<tr>
+<td> Chroniony </td><td> Zaufany </td><td> Nie jest tworzony obiekt opakowujący, w wyniku czego skrypt uzyskuje pełny dostęp do obiektu.
+</td></tr>
+<tr>
+<td> Chroniony </td><td> Niezaufany </td><td> Tworzony jest <a href="#Obiekty_jawne_.28explicit.29_i_niejawne_.28implicit.29">niejawny</a> <a href="#Obiekty_g.C5.82.C4.99bokie_.28deep.29_i_p.C5.82ytkie_.28shallow.29">głęboki</a> obiekt <code>XPCNativeWrapper</code>.
+</td></tr>
+<tr>
+<td> Niechroniony </td><td> Zaufany </td><td> Nie jest tworzony obiekt opakowujący, tak jak w pierwszym przypadku (skrypt chroniony i obiekt zaufany).
+</td></tr>
+<tr>
+<td> Niechroniony </td><td> Niezaufany </td><td> Nie jest tworzony obiekt opakowujący, tak jak w pierwszym przypadku (skrypt chroniony i obiekt zaufany)
+</td></tr></tbody></table>
+<h4 id="Korzystanie_z_konstruktora_obiektu_XPCNativeWrapper" name="Korzystanie_z_konstruktora_obiektu_XPCNativeWrapper"> Korzystanie z konstruktora obiektu <code>XPCNativeWrapper</code> </h4>
+<div class="note">Jak wspomniano wyżej, domyślnie w nowszych wersjach Firefoksa obiekty <code>XPCNativeWrapper</code> są tworzone automatycznie. <b>Nie ma potrzeby używania konstruktora obiektu <code>XPCNativeWrapper</code></b>, chyba że tworzony kod ma działać w starszych wersjach przeglądarki lub wyłączono obsługę obiektów <code>XPCNativeWrapper</code>.</div>
+<h5 id="Wywo.C5.82anie_konstruktora_obiektu_XPCNativeWrapper_z_argumentami_typu_String" name="Wywo.C5.82anie_konstruktora_obiektu_XPCNativeWrapper_z_argumentami_typu_String"> Wywołanie konstruktora obiektu <code>XPCNativeWrapper</code> z argumentami typu <code>String</code> </h5>
+<p>Rozważmy przykład:
+</p>
+<pre class="eval">var contentWinWrapper = new XPCNativeWrapper(content,
+ "document");
+</pre>
+<p>Tworzony jest <a href="#Obiekty_jawne_.28explicit.29_i_niejawne_.28implicit.29">niejawny</a> <a href="#Obiekty_g.C5.82.C4.99bokie_.28deep.29_i_p.C5.82ytkie_.28shallow.29">płytki</a> obiekt <code>XPCNativeWrapper</code>. Składnia została utrzymana ze względu na zgodność z wersjami Firefoksa wcześniejszymi niż 1.5. O ile do wszystkich własności obiektu <code>contentWinWrapper</code> można teraz uzyskać dostęp w bezpieczny sposób, o tyle dostęp do zwracanych przez nie wartości NIE jest bezpieczny (podobnie jak w wersjach Firefoksa wcześniejszych niż 1.5), ponieważ obiekt <code>XPCNativeWrapper</code> jest <a href="#Obiekty_g.C5.82.C4.99bokie_.28deep.29_i_p.C5.82ytkie_.28shallow.29">płytki</a>. Aby zatem porównać tytuł dokumentu zawartości (<i>content</i>) z bieżącym zaznaczeniem zawartości, należy wykonać następujący kod:
+</p>
+<pre class="eval">var winWrapper = new XPCNativeWrapper(content, "document",
+ "getSelection()");
+var docWrapper = new XPCNativeWrapper(winWrapper.document,
+ "title");
+return docWrapper.title == winWrapper.getSelection();
+</pre>
+<p>podobnie jak w wersjach Firefoksa starszych niż 1.5. Należy zwrócić uwagę, że argument <code>"getSelection()"</code> nie jest niezbędny; jeżeli kod nie jest przeznaczony do użytku w wersjach Firefoksa starszych niż 1.5, można go usunąć. Jedynym elementem wymaganym do utworzenia tego typu obiektu <code>XPCNativeWrapper</code> w programie Firefox 1.5 lub nowszym jest pojedynczy argument typu <code>String</code>, umieszczony po opakowywanym obiekcie. </p>
+<h5 id="Wywo.C5.82anie_konstruktora_obiektu_XPCNativeWrapper_bez_argument.C3.B3w_typu_String" name="Wywo.C5.82anie_konstruktora_obiektu_XPCNativeWrapper_bez_argument.C3.B3w_typu_String"> Wywołanie konstruktora obiektu <code>XPCNativeWrapper</code> bez argumentów typu <code>String</code> </h5>
+<p>Rozważmy przykład:
+</p>
+<pre class="eval">var contentWinWrapper = new XPCNativeWrapper(content);
+</pre>
+<p>Tworzony jest <a href="#Obiekty_jawne_.28explicit.29_i_niejawne_.28implicit.29">jawny</a> <a href="#Obiekty_g.C5.82.C4.99bokie_.28deep.29_i_p.C5.82ytkie_.28shallow.29">głęboki</a> obiekt <code>XPCNativeWrapper</code>. Dostęp do własności tego obiektu <code>XPCNativeWrapper</code> jest bezpieczny, a zwracane wartości będą także opakowane przez <a href="#Obiekty_jawne_.28explicit.29_i_niejawne_.28implicit.29">jawne</a> <a href="#Obiekty_g.C5.82.C4.99bokie_.28deep.29_i_p.C5.82ytkie_.28shallow.29">głębokie</a> obiekty <code>XPCNativeWrapper</code>.
+</p>
+<h3 id="Czas_istnienia_obiektu_XPCNativeWrapper" name="Czas_istnienia_obiektu_XPCNativeWrapper"> Czas istnienia obiektu <code>XPCNativeWrapper</code> </h3>
+<p>Jawne obiekty <code>XPCNativeWrapper</code> istnieją dopóki, dopóty istnieją do nich odwołania. Utworzenie nowego jawnego obiektu <code>XPCNativeWrapper</code> dla tego samego potencjalnie niezabezpieczonego obiektu object spowoduje utworzenie nowego obiektu opakowującego; należy mieć to na uwadze przy <a href="#Ustawianie_w.C5.82asno.C5.9Bci_.E2.80.9Eexpando.E2.80.9D_obiektu_XPCNativeWrapper">ustawianiu własności „expando”</a>.
+</p><p>Niejawne obiekty <code>XPCNativeWrapper</code> istnieją tak długo, jak opakowywane przez nie obiekty.
+</p>
+<h3 id="Ustawianie_w.C5.82asno.C5.9Bci_.E2.80.9Eexpando.E2.80.9D_obiektu_XPCNativeWrapper" name="Ustawianie_w.C5.82asno.C5.9Bci_.E2.80.9Eexpando.E2.80.9D_obiektu_XPCNativeWrapper"> Ustawianie własności „expando” obiektu <code>XPCNativeWrapper</code> </h3>
+<p>Możliwe jest ustawienie własności „expando” (tj. własności o nazwach, które nie mają odpowiedników wśród własności zdefiniowanych w specyfikacji IDL) dla obiektów <code>XPCNativeWrapper</code>. Własności te będą widoczne z poziomu chrome, ale nie będzie można uzyskać do nich dostępu z poziomu zawartości (<i>content</i>). <b>Nie istnieje bezpieczny sposób ustawienia własności „expando” z poziomu chrome i odczytania jej następnie z poziomu zawartości.</b>
+</p>
+<h3 id="Niezabezpieczony_dost.C4.99p_do_w.C5.82asno.C5.9Bci" name="Niezabezpieczony_dost.C4.99p_do_w.C5.82asno.C5.9Bci"> Niezabezpieczony dostęp do własności </h3>
+<p>Jeżeli z jakiegoś powodu wymagany jest niezabezpieczony dostęp do własności, można go uzyskać za pomocą własności <code>wrappedJSObject</code> obiektu opakowującego. Jeżeli na przykład obiekt <code>docWrapper</code> jest obiektem opakowującym obiekt <code>doc</code>, to własność
+</p>
+<pre class="eval">docWrapper.wrappedJSObject.prop
+</pre>
+<p>jest identyczna z własnością
+</p>
+<pre class="eval">doc.prop
+</pre>
+<p>Jak podkreślono w tytule niniejszej sekcji, technika ta <b>nie jest bezpieczna</b>. Własności <code>wrappedJSObject</code> nie należy używać w kodzie produkcyjnym w celu ominięcia pośrednictwa obiektu XPCNativeWrapper.
+</p><p>{{ Fx_minversion_inline(3) }} W programie Firefox 3 własność <code>wrappedJSObject</code> zwraca kolejny obiekt opakowujący obiektu zawartości JavaScript (XPCSafeJSObjectWrapper), co pozwala na bezpieczne sprawdzenie obiektu zawartości — patrz <a href="pl/Obiekty_opakowuj%c4%85ce_XPConnect#XPCSafeJSObjectWrapper">Obiekty opakowujące XPConnect#XPCSafeJSObjectWrapper</a>.
+</p><p>Informacje o lepszych rozwiązaniach alternatywnych znajdują się w artykule <a href="pl/Fragmenty_kodu/Interakcja_pomi%c4%99dzy_stronami_uprzywilejowanymi_i_stronami_bez_przywilej%c3%b3w">Interakcja pomiędzy stronami uprzywilejowanymi i stronami bez przywilejów</a>.
+</p>
+<h3 id="Znane_b.C5.82.C4.99dy" name="Znane_b.C5.82.C4.99dy"> Znane błędy </h3>
+<p>W wersjach z serii 1.5.0.x występują dwa znane błędy w obsłudze obiektów <code>XPCNativeWrapper</code>:
+</p>
+<ol><li> W wersjach Firefoksa od 1.5 do 1.5.0.4 występuje {{ Bug(337095) }}, w wyniku którego w niektórych przypadkach dla skryptów chronionych nie są tworzone obiekty opakowujące. Z reguły, gdy skrypt chroniony uzyskuje dostęp do własności lub wywołuje funkcję, a ta własność lub funkcja zwraca obiekt niezaufany, tworzony jest obiekt opakowujący. Jeżeli jednak funkcja w skrypcie chronionym jest wywoływana z poziomu kodu w języku C++, a jako argument jest do niej przekazywany obiekt niezaufany, obiekt opakowujący <i>nie</i> zostanie utworzony. W funkcjach, które mają być wywołane w taki sposób, należy zaimplementować <a href="#XPCNativeWrapper_constructor_call_with_no_string_arguments">własną technikę opakowania</a>. Błąd ten naprawiono w Firefoksie w wersji 1.5.0.5 i nowszych.
+</li><li> W wersjach Firefoksa od 1.5 do 1.5.0.5 występuje {{ Bug(345991) }}, w wyniku którego komponenty utworzone przy użyciu języka JavaScript nie są skryptami chronionymi. Błąd ten naprawiono w Firefoksie w wersji 1.5.0.6 i nowszych.
+</li></ol>
+<h3 id="Ograniczenia_w_korzystaniu_z_obiektu_XPCNativeWrapper" name="Ograniczenia_w_korzystaniu_z_obiektu_XPCNativeWrapper"> Ograniczenia w korzystaniu z obiektu <code>XPCNativeWrapper</code> </h3>
+<p>Niektóre często stosowane własności i style kodowania nie mogą być używane z obiektami <code>XPCNativeWrapper</code>:
+</p>
+<ol><li> Przypisywanie wartości lub odczytywanie własności <code>on*</code> obiektu <code>XPCNativeWrapper</code> opakowującego węzeł DOM lub obiekt <code>window</code> spowoduje zgłoszenie wyjątku. (Zamiast tej techniki należy użyć metody <code>addEventListener</code> oraz — jeżeli używana była dyrektywa <code>return false;</code> — należy zastąpić ją metodą <code>event.preventDefault()</code> w kodzie obserwatora).
+</li><li> Nie jest możliwy dostęp do ramek określanych przy użyciu nazwy okna (np. <code>window.nazwaRamki</code>) w odniesieniu do obiektów <code>XPCNativeWrapper</code>.
+</li><li> Nie jest możliwy dostęp do własności <code>document.all</code> w odniesieniu do obiektu <code>XPCNativeWrapper</code> opakowującego obiekt <code>document</code>.
+</li><li> Nie jest możliwy dostęp do nazwanych elementów określanych przy użyciu nazw w odniesieniu do obiektu <code>XPCNativeWrapper</code> opakowującego dokument HTML. Jeżeli na przykład istnieje element <code>&lt;form name="foo"&gt;</code>, a obiekt <code>docWrapper</code> jest obiektem opakowującym dokument HTML <code>doc</code>, to własność <code>doc.foo</code> zwraca obiekt <code>HTMLFormElement</code>, ale własność <code>docWrapper.foo</code> zwraca wartość <code>undefined</code>. Aby uzyskać dostęp do nazwanych elementów, należy użyć metody <code>docWrapper.forms.namedItem("foo")</code>.
+</li><li> Nie jest możliwy dostęp do elementów określanych przy użyciu identyfikatorów w odniesieniu do obiektu <code>XPCNativeWrapper</code> opakowującego dokument HTML. Należy użyć metody <code>getElementById</code>.
+</li><li> Nie jest możliwy dostęp do elementów <code>input</code> określanych przy użyciu nazw w odniesieniu do obiektu <code>XPCNativeWrapper</code> opakowującego formularz HTML. Należy użyć metody <code>form.elements.namedItem("nazwaElementuInput")</code>.
+</li><li> Nie jest możliwy dostęp do elementów określanych przy użyciu nazw w odniesieniu do obiektu <code>XPCNativeWrapper</code> opakowującego obiekt <code>HTMLCollection</code>. Należy użyć metody <code>namedItem()</code>. Uwaga: metoda <code>namedItem</code> zwraca jedynie pierwszy element <code>input</code> o danej nazwie, nawet jeżeli w formularzu znajduje się więcej elementów o tej samej nazwie (np. przycisków radiowych). </li><li> Nie jest możliwe wywoływanie metod zaimplementowanych przez wtyczki NPAPI za pośrednictwem obiektu <code>XPCNativeWrapper</code> opakowującego odpowiadający im węzeł. </li><li> Nie jest możliwe ustawianie i pobieranie własności zaimplementowanych przez wtyczki NPAPI za pośrednictwem obiektu <code>XPCNativeWrapper</code> opakowującego odpowiadający im węzeł. </li><li> Nie jest możliwe wywoływanie metod zaimplementowanych poprzez wiązania XBL dołączone do węzła za pośrednictwem obiektu <code>XPCNativeWrapper</code> opakowującego ten węzeł.
+</li><li> Nie jest możliwe ustawianie ani pobieranie własności zaimplementowanych poprzez wiązania XBL dołączone do węzła za pośrednictwem obiektu <code>XPCNativeWrapper</code> opakowującego ten węzeł.
+</li><li> Przy wyliczaniu własności obiektu <code>XPCNativeWrapper</code> za pomocą pętli "<code>for (var p in obiekt_opakowujący)</code>" nie są wyliczane własności zdefiniowane w specyfikacji IDL.
+</li><li> Własność Object.prototype nie jest częścią hierarchii prototypów obiektu <code>XPCNativeWrapper</code>. W rezultacie wiele własności obiektu <code>Object.prototype</code> pozostaje niezdefiniowanych w odniesieniu do obiektu <code>XPCNativeWrapper</code> (są to własności <code>__proto__</code>, <code>__parent__</code>, <code>__count__</code>, <code>toSource</code>, <code>toLocaleString</code>, <code>valueOf</code>, <code>watch</code>, <code>unwatch</code>, <code>hasOwnProperty</code>, <code>isPrototypeOf</code>, <code>propertyIsEnumerable</code>, <code>__defineGetter__</code>, <code>__defineSetter__</code>, <code>__lookupGetter__</code> oraz <code>__lookupSetter__</code>).
+</li><li> Nie jest obsługiwana metoda <code>importXPCNative</code> dostępna w starszych implementacjach obiektów <code>XPCNativeWrapper</code>.
+</li><li> Nie jest możliwy dostęp do klas standardowych (takich jak <code>Function</code>) za pośrednictwem obiektu <code>XPCNativeWrapper</code>. Aby utworzyć funkcje i obiekty powiązane z rodzicem danego okna, należy skorzystać z metody <code>eval</code> tego okna.
+</li></ol>
+<p>Artykuł <a class="external" href="http://oreillynet.com/pub/a/network/2005/11/01/avoid-common-greasemonkey-pitfalls.html?page=3">Avoid Common Pitfalls in Greasemonkey</a> (<i>Jak uniknąć typowych pułapek w Greasemonkey</i>; tekst w jęz. ang.) zawiera obszerne omówienia niektórych z powyższych ograniczeń (w odniesieniu do skryptów Greasemonkey).
+</p><p><br>
+</p>
+<div class="noinclude">
+</div>
+{{ languages( { "en": "en/XPCNativeWrapper", "es": "es/XPCNativeWrapper", "fr": "fr/XPCNativeWrapper", "it": "it/XPCNativeWrapper", "ja": "ja/XPCNativeWrapper" } ) }}