2012-04-01 18 views
5

W moim kodu mam linię, która zrzuca bieżącego okna (co zdarza się strony wideo YouTube):JavaScript widoczny w Firebug, niedostępne w kodzie

Firebug.Console.log(myWindow); 

Można zauważyć, że obiekt okna zawiera "yt" nieruchomość, która jest kolejny obiekt, który może być łatwo poddane inspekcji w debuggera:

http://i.imgur.com/lHHns.png

Niestety, nazywając

Firebug.Console.log(myWindow.yt); 

logi "niezdefiniowane" - dlaczego tak jest i jak uzyskać dostęp do tej właściwości "yt"?

Edytuj: jeden dodatek, który może być ważny: kod, który piszę, jest częścią rozszerzenia firefox, więc nie działa w pgae, ale w chrome - zaczynam myśleć, że to może być przyczyna. Czy skrypty chrome mogą być w jakiś sposób ograniczone w tym, co widzą/uzyskują dostęp, w przeciwieństwie do kodu w znacznikach skryptów?

+0

Zgaduję, że ma to związek z Firebug, ponieważ mam do niego dostęp z poziomu konsoli Chrome. – Griffin

+0

Po prostu upewnij się, czy wywołujesz 'Firebug.Console.log (myWindow.yt);' w dokładnie tej samej linii co 'Firebug.Console.log (myWindow);'? –

+0

@Griffin: tak nie jest, mogę uzyskać do niego dostęp za pośrednictwem Chrome lub innych narzędzi programistycznych, ale nadal jest on niewidoczny dla kodu uruchomionego w przeglądarce - nie tylko nie mogę zalogować go przez Firebug, nie mogę go nazwać metody ani nic. –

Odpowiedz

2

Ze względów bezpieczeństwa rozszerzenia przeglądarki Firefox nie uzyskują bezpośredniego dostępu do obiektów stron internetowych, ale poprzez wrapper. To opakowanie pozwala na użycie wszystkich właściwości zdefiniowanych przez obiekty DOM, ale wszystko dodane przez JavaScript strony będzie niewidoczne. Można access the original object:

Firebug.Console.log(XPCNativeWrapper.wrappedJSObject.yt); 

Jednakże, jeśli chcesz interakcji ze strony internetowej z rozszerzeniem należy rozważyć alternatywy, gdzie strona internetowa nie może płatać figle na ciebie (np uruchomiony kod nieuprzywilejowanego w oknie Treść: myWindow.location.href = "javascript:...") .

0

Z powodu rozszerzeń przeglądarki Firefox i Chrome nie można uzyskać dostępu do skryptów JavaScript na stronie.

0

Widziałem zamieszanie w ten sposób za pomocą asynchronicznych interfejsów API.

pokazuje zawartość wypełnionego obiektu, ale podczas uzyskiwania dostępu do właściwości obiektu w kodzie, nie są one jeszcze wypełnione, ponieważ wywołanie jest asynchroniczne.

Dlaczego Chrome i Firefox pokazują, że wszystkie są wypełnione, to prawdopodobnie problem związany z synchronizacją, ponieważ prawdopodobnie przetwarzają one asynchronicznie także console.log().

Powiązane problemy