2010-03-22 3 views
13

Sto lavorando a un'applicazione Web e utilizzo del plug-in Colorbox jQuery per far apparire una finestra che presenta un modulo per la modifica degli elementi della finestra principale. Sto usando Firebug per eseguire il debug di Javascript e jQuery e ho notato che non posso selezionare un elemento nel mio modulo HTML Colorbox utilizzando la riga di comando della console jQuery. Ad esempio:Selettori Firebug e jQuery in un iFrame

$ date = $ ("# date");

non restituisce nulla quando viene eseguito dalla riga di comando della console jQuery, anche se ho un elemento di input con id = "date" e il puntatore Firebug "element inspect" può trovare l'elemento nell'iFrame. C'è un modo per ottenere la console di Firebug per accedere agli elementi in un iFrame?

Grazie per il vostro aiuto! Doug

+0

puoi chiarire, lo script funziona normalmente quando parte della pagina, ma non quando viene eseguito attraverso la console? –

+0

hai provato 'var date = $ (" # date ");' – ant

+0

JavaScript funziona nel Colorbox, è solo che non riesco a manipolare gli elementi presenti nell'iFrame con jQuery nella console di Firebug. –

risposta

16

È necessario passare il documento di iframe come contesto per il selettore, perché iframe dispone di un proprio separato DOM albero:

$('#date', $('iframe').get(0).contentDocument); 

Al fine di ottenere l'accesso a contenuti di iframe, deve essere caricato dalla stessa dominio come documento genitore.


Proprio per elaborare qui, .contentDocument proprietà funziona in Chrome (e FF), ma non in IE < 8. È necessario utilizzare .document.

+0

Yaggo, Grazie per la tua risposta, puoi approfondire un po '? Non sto "ottenendo" ciò che intendi accedendo al contesto di iFrame. Grazie, Doug –

+0

solo per elaborare qui, proprietà '.contentDocument' funziona in Chrome (e FF) ma non in IE. Devi usare '.document'. – Aliostad

21

Stai cercando il metodo di cd, qui documentata: http://getfirebug.com/wiki/index.php/Command_Line_API

Ecco un bookmarklet che uso per automatizzare il salto in iframe per qualsiasi iframed applicazione Facebook. Dovrebbe fornire abbastanza di un esempio da modificare per il tuo uso.

javascript:with(_FirebugCommandLine){cd($$(".canvas_iframe_util")[0].contentWindow)} 

noti che with è generalmente cattiva pratica, ma questo è letteralmente come Firebug esegue ciò che si digita nella console, quindi ho imitato quello.

Dopo aver eseguito questo, tutto ciò che si digita nella riga di comando viene eseguito nel contesto dell'iframe.

+3

Questo è genio. Grazie per aver condiviso questo frammento. Rende lo sviluppo di app iframe su Facebook molto più semplice. –

+4

Per chiarire, se sei nella console Firebug tutto ciò di cui hai bisogno è il cd (iframedom.contentWindow) –

+0

Sì, anche se un bookmarklet è uno strumento molto utile per questo. – bcherry