¿Hay alguna forma de cambiar el contexto a iframe en la consola de JavaScript?

107

Me gustaría cambiar el contexto del javascript ejecutado en la herramienta de desarrollo webkit / consola firebug para ejecutar su código como si se estuviera ejecutando desde dentro de un iframe en la página.

Sé que podría hacer esto abriendo la página en el iframe en una página separada, pero quiero ejecutar el código donde interactúa con el marco principal.

Muhd
fuente
1
siempre puedes ejecutar el código a la window.frames[x]moda. Simplemente agregue el comando que desee. IEwindow.frames[0].runFunction()
LoveAndCoding
1
@Ktash, ¿tal vez te gustaría dar esa respuesta?
Muhd
¿Cómo puedo hacer lo mismo en IE? Me resulta extremadamente difícil seleccionar un elemento en la ventana de la consola usando $ si el elemento está ubicado en un IFRAME interno. Por favor ayuda.
tarekahf

Respuestas:

149

Chrome 15 le permite cambiar el alcance de la consola. En la parte inferior de la consola, junto al botón de borrar la consola, hay un menú que dice <top frame>que dará una lista de marcos disponibles:

ingrese la descripción de la imagen aquí

Firefox tiene una característica similar actualmente en desarrollo:

ingrese la descripción de la imagen aquí


También puede navegar a través de los marcos usando la línea de comando :

var frame = document.getElementById("frame1").contentWindow;
cd(frame);
Dennis
fuente
6
¿Puedo ejecutar código en la consola para lograr lo mismo o tengo que hacer clic en el selector de fotogramas?
Bodine
@bodine: ¿ha encontrado una manera de lograrlo desde el comando de la consola?
arty
1
Tenga en cuenta que este menú desplegable se encuentra ahora en la parte superior de la consola, en lugar de en la parte inferior.
Muhd
1
No veo esto en Chrome 38. No pude averiguar rápidamente cómo hacer esto en Chrome; usó el cd (marcos [<número de índice>]) en Firefox en su lugar.
Akrikos
1
Qué lástima. No conservará el marco seleccionado si se cambia el contenido del marco. Vuelve al "marco superior"
bryc
22

Puede ejecutar código en <iframe>s utilizando la window.frames[x]funcionalidad. Por ejemplo,

window.frames[0].runFunction()
Amor y codificación
fuente
Una buena alternativa si FireBug es tu arma preferida. Gracias.
Surreal Dreams
1
¿Cómo ejecutarías código fuera de funciones como los comandos jQuery? ¿O si desea obtener una referencia a un elemento DOM en algún marco y luego ejecutar código contra ese elemento?
David
Entonces, como ejemplo sería:window.frames[0].alert()
Shayan
6

En el Chrome actual (versión 52), todo lo que tienes que hacer es seleccionar el iframe en la pestaña "Elementos" de las herramientas de desarrollo. Todo lo que ejecute en la consola JS se ejecutará automáticamente en el contexto del iframe seleccionado.

Por ejemplo, aquí seleccioné un iframe, y cuando escribo document.location.pathnameen la consola, devuelve el atributo src del iframe, en lugar de la URL de la barra de direcciones:

ingrese la descripción de la imagen aquí

dpercy
fuente
4

Para la solución firebug, vea esta respuesta en otra pregunta SO. Sin embargo, no funciona entre dominios como la solución de Chrome de Dennis.

Editar: con las versiones más recientes de firebug, es posible que hayan solucionado el problema entre dominios.

Muhd
fuente
4

La ejecución de instrucciones y comandos de script de forma predeterminada se realiza en el contexto de la ventana de nivel superior. Si está usando marcos, use el comando de consola "cd ()".

cd () Llamar a cd () sin parámetros vuelve a la ventana de nivel superior.

cd (ventana) Le permite cambiar la evaluación de la expresión de la línea de comandos desde la ventana de nivel superior predeterminada de la página web a la ventana de un marco.

Más info aquí

Sebastián
fuente
Es exactamente lo que estaba buscando. (funciona en Firefox) Gracias.
user2410595
4
cd(document.getElementsByTagName('iframe')[0]);
Andreyka Bonart
fuente
2
¡Bienvenido a Stack Overflow! Considere editar su publicación para agregar más explicaciones sobre lo que hace su código y por qué resolverá el problema. Una respuesta que en su mayoría solo contiene código (incluso si está funcionando) generalmente no ayudará al OP a comprender su problema.
SuperBiasedMan
¡Gracias! Esta es una forma extraña de que Firefox lo haga, pero supongo que "cd (iframe)" es lo que ingresas en la consola para cambiar de contexto. Te di un +1 b / c, me ahorraste toneladas de golpes de cabeza, ¡pero realmente deberías pulir esta publicación y explicarlo!
Scott Smith