2011-11-01 19 views
89

me gustaría cambiar el contexto de la javascript ejecutado en la consola de herramientas/firebug desarrollador webkit para ejecutar su código como el que se está ejecutando desde el interior de un iframe en la página.¿Hay alguna manera de cambiar el contexto a iframe en la consola de JavaScript?

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.

+1

se siempre se puede ejecutar el código en la forma 'window.frames [x]'. Simplemente agregue el comando que desee. ES DECIR. 'window.frames [0] .runFunction()' – Ktash

+1

@Ktash, ¿te gustaría hacer una respuesta? – Muhd

+0

¿Cómo puedo hacer lo mismo en IE?Encuentro 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

Respuesta

123

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

enter image description here

Firefox tiene un similar feature actualmente en desarrollo:

enter image description here


también puede navegar a través de marcos using the command line:

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

Muy bueno y hasta funciona entre dominios. Justo lo que quería. – Muhd

+5

¿Puedo ejecutar código en la consola para lograr lo mismo, o tengo que hacer clic en el selector de marco? – bodine

+0

@bodine - ¿Has encontrado la manera de lograrlo desde el comando de la consola? – arty

20

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

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

Una buena alternativa si FireBug es tu arma de elección. Gracias. –

+0

¿Cómo ejecutarías el código fuera de funciones como los comandos jQuery? O si desea obtener una referencia a un elemento DOM debajo de un marco, entonces ejecute el código contra ese elemento? – David

4

Para la solución de Firebug, vea this answer en otra pregunta de SO. Sin embargo, no funciona de forma cruzada como la solución de Chrome de Dennis.

Editar: Con las versiones más recientes de firebug pueden haber resuelto el problema entre dominios.

3

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

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

cd (ventana) Le permite cambiar de línea de comandos evaluación de la expresión de la ventana de nivel superior por defecto de la página web a la ventana de una trama.

Más información, here

+1

parece que solo es relevante para IE, pero no para webkit .. – Cherniv

+0

Es exactamente lo que estaba buscando. (funciona en Firefox) Gracias. – user2410595

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

¡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 solo contenga código (incluso si funciona) generalmente no ayudará al OP a entender su problema. – SuperBiasedMan

+0

¡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 el contexto. Te di un +1 b/c. Me salvaste un montón de golpes de cabeza, ¡pero deberías pulir esta publicación y explicarla! –

5

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

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

enter image description here

Cuestiones relacionadas