2011-11-01 8 views
89

Vorrei cambiare il contesto del javascript eseguito nello strumento di sviluppo webkit/firebug console per eseguire il suo codice come se fosse eseguito all'interno di un iframe nella pagina.C'è un modo per cambiare contesto in iframe nella console javascript?

So che potrei farlo aprendo la pagina nell'iframe su una pagina separata, ma voglio eseguire il codice dove interagisce con il frame principale.

+1

voi può sempre eseguire codice nel modo 'window.frames [x]'. Basta aggiungere qualsiasi comando tu voglia. OSSIA 'window.frames [0] .runFunction()' – Ktash

+1

@Ktash, vorresti forse fare una risposta? – Muhd

+0

Come posso fare lo stesso in IE?Trovo estremamente difficile selezionare un elemento nella finestra della console usando $ se l'elemento si trova in un IFRAME interno. Per favore aiuto. – tarekahf

risposta

123

Chrome 15 consente di modificare l'ambito della console. Sulla parte inferiore della console, accanto al pulsante console chiara, c'è un menu che dice <top frame> che darà un elenco di fotogrammi disponibili:

enter image description here

Firefox ha un similar feature attualmente in fase di sviluppo:

enter image description here


È possibile anche navigare tra i fotogrammi using the command line:

var frame = document.getElementById("frame1").contentWindow; 
cd(frame); 
+2

Molto bello e funziona anche a livello di dominio. Proprio quello che volevo. – Muhd

+5

Posso eseguire il codice nella console per realizzare la stessa cosa, o devo fare clic sul selettore di frame? – bodine

+0

@bodine: hai trovato un modo per ottenerlo dal comando della console? – arty

20

È possibile eseguire il codice in s utilizzando la funzionalità window.frames[x]. Ad esempio,

window.frames[0].runFunction() 
+0

Una bella alternativa se FireBug è la tua arma preferita. Grazie. –

+0

Come eseguiresti il ​​codice al di fuori delle funzioni come i comandi jQuery? O se volessi ottenere un riferimento ad un elemento DOM sotto qualche frame, quindi eseguire il codice contro quell'elemento? – David

4

Per soluzione firebug, vedere this answer su un'altra domanda SO. Tuttavia, non funziona su più domini come la soluzione Chrome di Dennis.

Modifica: con le versioni più recenti di firebug possono aver risolto il problema tra domini.

3

L'esecuzione di istruzioni e comandi di script per impostazione predefinita viene eseguita nel contesto della finestra di livello superiore. Se si utilizzano i frame, utilizzare il comando della console "cd()".

cd() Calling cd() senza parametri torna alla finestra di primo livello.

cd (finestra) Consente di modificare la valutazione dell'espressione della riga di comando dalla finestra predefinita di livello superiore della pagina Web alla finestra di un frame.

Maggiori informazioni, here

+1

sembra che sia rilevante solo per IE, ma non per il webkit .. – Cherniv

+0

È esattamente quello che stavo cercando. (funziona in Firefox) Grazie. – user2410595

3
cd(document.getElementsByTagName('iframe')[0]); 
+1

Benvenuti in Stack Overflow! Ti preghiamo di considerare di modificare il tuo post per aggiungere ulteriori spiegazioni su cosa fa il tuo codice e perché risolverà il problema. Una risposta che per lo più contiene solo codice (anche se funziona) di solito non aiuta l'OP a capire il loro problema. – SuperBiasedMan

+0

Grazie! Questo è un modo strano per farlo, ma suppongo che "cd (iframe)" sia ciò che si inserisce nella console per cambiare contesto. Ti ho dato un +1 b/c mi hai risparmiato un sacco di head-banging, ma dovresti davvero lucidare questo post e spiegarlo! –

5

In Chrome di oggi (versione 52), tutto ciò che dovete fare è selezionare l'iframe nella scheda "Elementi" degli strumenti di sviluppo. Tutto ciò che viene eseguito nella console JS verrà eseguito automaticamente nel contesto dell'iframe selezionato.

Per esempio, qui ho selezionato un iframe, e quando digito document.location.pathname nella console restituisce l'attributo src del iframe, invece che l'URL dalla barra degli indirizzi:

enter image description here

Problemi correlati