C'è un modo per cambiare il contesto in iframe nella console javascript?


107

Vorrei cambiare il contesto del javascript eseguito nello strumento per sviluppatori webkit / console firebug per eseguire il suo codice come se fosse in esecuzione da un iframe sulla pagina.

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


1
puoi sempre eseguire il codice alla window.frames[x]moda. Basta aggiungere qualsiasi comando tu voglia. IEwindow.frames[0].runFunction()
LoveAndCoding

1
@Ktash, vorresti forse renderlo una risposta?
Muhd

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

Risposte:


149

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

inserisci qui la descrizione dell'immagine

Firefox ha una funzionalità simile attualmente in fase di sviluppo:

inserisci qui la descrizione dell'immagine


Puoi anche navigare tra i frame utilizzando la riga di comando :

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

6
Posso eseguire codice nella console per eseguire la stessa operazione o devo fare clic sul selettore di frame?
bodine

@bodine - hai trovato un modo per eseguirlo dal comando della console?
artistico

1
Nota che questo menu a discesa si trova ora nella parte superiore della console, anziché nella parte inferiore.
Muhd

1
Non lo vedo in Chrome 38. Non sono riuscito a capire rapidamente come farlo in Chrome; ha utilizzato invece il cd (frames [<numero indice>]) in Firefox.
Akrikos

1
Che peccato. Non manterrà il frame selezionato se il contenuto del frame viene modificato. Torna al "frame superiore"
bryc

22

È possibile eseguire il codice in <iframe>s utilizzando la window.frames[x]funzionalità. Per esempio,

window.frames[0].runFunction()

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

1
Come eseguiresti il ​​codice al di fuori di funzioni come i comandi jQuery? O se si desidera ottenere un riferimento a un elemento DOM in un frame, eseguire il codice su quell'elemento?
David

Quindi, ad esempio:window.frames[0].alert()
Shayan

6

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

Ad esempio, qui ho selezionato un iframe e quando digito document.location.pathnamenella console restituisce l'attributo src dell'iframe, invece dell'URL dalla barra degli indirizzi:

inserisci qui la descrizione dell'immagine


4

Per la soluzione firebug vedere questa risposta 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 potrebbero essere stati risolti i problemi tra domini.


4

L'esecuzione di istruzioni e comandi di script per impostazione predefinita viene eseguita nel contesto della finestra di primo livello. Se stai usando i frame, usa il comando da console "cd ()".

cd () La chiamata di cd () senza parametri ritorna alla finestra di primo livello.

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

Maggiori informazioni, qui


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

4
cd(document.getElementsByTagName('iframe')[0]);

2
Benvenuto in Stack Overflow! Considera la possibilità 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 aiuterà l'OP a capire il problema.
SuperBeddingMan

Grazie! Questo è un modo strano per Firefox di farlo, ma immagino che "cd (iframe)" sia ciò che inserisci nella console per cambiare contesto. Ti ho dato un +1 b / c mi hai risparmiato un sacco di colpi di testa, ma dovresti davvero ripulire questo post e spiegarlo!
Scott Smith
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.