2012-04-01 14 views
5

Nel mio codice Ho una linea che scarica la finestra corrente (che sembra essere una pagina di video di youtube):JavaScript visibile a Firebug, inaccessibile nel codice

Firebug.Console.log(myWindow); 

Si può vedere che oggetto finestra contiene proprietà "yt", che è un altro oggetto che può essere facilmente ispezionabile in debugger:

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

Purtroppo, chiamando

Firebug.Console.log(myWindow.yt); 

logs "undefined" - perché è così, e come posso accedere a questa proprietà "yt"?

Edit: un addidtion che potrebbe essere importante: il codice che sto scrivendo fa parte di un'estensione firefox, quindi non è in esecuzione all'interno di un pgae, ma in chrome - sto iniziando a pensare che potrebbe essere il causa. Gli script di Chrome possono essere in qualche modo limitati in ciò che possono vedere/accedere al codice nei tag di script?

+0

La mia ipotesi è qualcosa a che fare con Firebug, dal momento che posso accedervi bene dalla console di Chrome. – Griffin

+0

Solo assicurandoti, chiami 'Firebug.Console.log (myWindow.yt);' esattamente alla stessa riga di 'Firebug.Console.log (myWindow);'? –

+0

@Griffin: non è così, posso accedervi tramite Chrome o altri strumenti di sviluppo, ma è ancora invisibile al codice in esecuzione nel browser - non solo non riesco a collegarlo tramite Firebug, non posso chiamarlo metodi né nulla. –

risposta

2

Per motivi di sicurezza, le estensioni di Firefox non accedono direttamente agli oggetti delle pagine Web ma tramite un wrapper. Questo wrapper ti permette di usare tutte le proprietà definite dagli oggetti DOM ma qualsiasi cosa aggiunto dalla pagina JavaScript sarà invisibile. È possibile access the original object:

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

Tuttavia, se si desidera interagire con la pagina web da un'estensione che si dovrebbe prendere in considerazione le alternative in cui la pagina web non può giocare brutti scherzi su di voi (ad esempio l'esecuzione di codice non privilegiato nella finestra del contenuto: myWindow.location.href = "javascript:...") .

0

Le estensioni di Firefox e Chrome non possono accedere a JavaScript nella pagina per motivi di sicurezza.

0

Ho visto una tale confusione utilizzando le API asincrone.

console.log(obj); mostra il contenuto di un oggetto tutto compilato, ma quando si accede alle proprietà dell'oggetto nel codice, non sono ancora realmente popolate a causa della chiamata asincrona.

Perché Chrome e Firefox li mostrano tutti compilati è probabilmente solo un problema di temporizzazione in quanto probabilmente elaborano anche lo console.log() in modo asincrono.

Problemi correlati