Existe uma maneira de alterar o contexto para iframe no console javascript?

107

Eu gostaria de alterar o contexto do javascript executado na ferramenta de desenvolvedor webkit / console do firebug para executar seu código como se estivesse sendo executado de dentro de um iframe na página.

Sei que poderia fazer isso abrindo a página no iframe em uma página separada, mas quero executar o código onde ele interage com o quadro pai.

Muhd
fonte
1
você sempre pode executar o código na window.frames[x]moda. Basta anexar o comando que desejar. IEwindow.frames[0].runFunction()
LoveAndCoding 01 de
1
@Ktash, você gostaria de responder a isso?
Muhd
Como posso fazer o mesmo no IE? Acho extremamente difícil selecionar um elemento na janela do console usando $ se o elemento estiver localizado em um IFRAME interno. Por favor ajude.
tarekahf

Respostas:

149

O Chrome 15 permite que você altere o escopo do console. Na parte inferior do console, ao lado do botão limpar console, há um menu que diz <top frame>que fornecerá uma lista de frames disponíveis:

insira a descrição da imagem aqui

O Firefox tem um recurso semelhante atualmente em desenvolvimento:

insira a descrição da imagem aqui


Você também pode navegar pelos frames usando a linha de comando :

var frame = document.getElementById("frame1").contentWindow;
cd(frame);
Dennis
fonte
6
Posso executar código no console para realizar a mesma coisa ou tenho que clicar no seletor de quadros?
bodine
@bodine - você encontrou uma maneira de fazer isso a partir do comando do console?
artístico de
1
Observe que essa lista suspensa agora está na parte superior do console, e não na parte inferior.
Muhd
1
Não vejo isso no Chrome 38. Não foi possível descobrir rapidamente como fazer isso no Chrome; usou o cd (frames [<número do índice>]) no Firefox.
Akrikos
1
Que pena. Ele não reterá o quadro selecionado se o conteúdo do quadro for alterado. Ele volta para "quadro superior"
bryc 01 de
22

Você pode executar código em <iframe>s usando a window.frames[x]funcionalidade. Por exemplo,

window.frames[0].runFunction()
LoveAndCoding
fonte
Uma boa alternativa se FireBug for sua arma de escolha. Obrigado.
Surreal Dreams de
1
Como você executaria código fora de funções como comandos jQuery? Ou se você quiser obter uma referência a um elemento DOM em algum quadro, execute o código nesse elemento?
David
Portanto, um exemplo seria:window.frames[0].alert()
Shayan
6

No Chrome de hoje (versão 52), tudo que você precisa fazer é selecionar o iframe na guia "Elementos" das ferramentas de desenvolvimento. Tudo o que você executar no console JS será executado automaticamente no contexto do iframe selecionado.

Por exemplo, aqui selecionei um iframe e, quando digito document.location.pathnameno console, ele retorna o atributo src do iframe, em vez do URL da barra de endereço:

insira a descrição da imagem aqui

dpercy
fonte
4

Para a solução do firebug, veja esta resposta em outra pergunta do SO. Porém, não funciona entre domínios como a solução de Dennis para Chrome.

Edit: Com versões mais recentes do firebug, eles podem ter corrigido o problema entre domínios.

Muhd
fonte
4

A execução de instruções de script e comandos por padrão é feita no contexto da janela de nível superior. Se você estiver usando quadros, use o comando de console "cd ()".

cd () Chamar cd () sem parâmetros retorna à janela de nível superior.

cd (janela) Permite que você altere a avaliação da expressão de linha de comando da janela de nível superior padrão da página da web para a janela de um quadro.

Mais informações aqui

Sebastian
fonte
É exatamente o que eu estava procurando. (funciona no Firefox) Obrigado.
user2410595
4
cd(document.getElementsByTagName('iframe')[0]);
Andreyka Bonart
fonte
2
Bem-vindo ao Stack Overflow! Considere editar sua postagem para adicionar mais explicações sobre o que seu código faz e por que ele resolverá o problema. Uma resposta que contém apenas código (mesmo que esteja funcionando) geralmente não ajudará o OP a entender o problema.
SuperBushedMan
Obrigado! Esta é uma maneira estranha de o Firefox fazer isso, mas eu acho que "cd (iframe)" é o que você insere no console para mudar de contexto. Eu lhe dei um +1 b / c, você me salvou de toneladas de bate cabeça, mas você realmente deveria polir este post e explicá-lo!
Scott Smith