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.


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);

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()

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


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.


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


É exatamente o que eu estava procurando. (funciona no Firefox) Obrigado.
user2410595

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.