2010-03-22 18 views
13

Estoy trabajando en una aplicación web y usando el plugin jQuery Colorbox para abrir una ventana que presenta un formulario para editar elementos de la ventana principal. Estoy usando Firebug para depurar mi Javascript y jQuery, y noté que no puedo seleccionar un elemento en mi formulario HTML de Colorbox usando la línea de comandos de la consola jQuery. Por ejemplo:Selectores Firebug y jQuery en un iFrame

$ date = $ ("# date");

no devuelve nada cuando se ejecuta desde la línea de comandos de la consola jQuery, aunque tengo un elemento de entrada con id = "date" y el puntero "elemento inspeccionar" Firebug puede encontrar el elemento en el iFrame. ¿Hay alguna manera de hacer que la consola de Firebug acceda a los elementos en un iFrame?

Gracias por su ayuda! Doug

+0

¿Puedes aclarar si el script funciona normalmente cuando parte de la página, pero no cuando se ejecuta a través de la consola? –

+0

intenté 'var date = $ (" # date ");' – ant

+0

El Javascript funciona en el Colorbox, es solo que no puedo manipular los elementos que están en el iFrame con jQuery en la consola de Firebug. –

Respuesta

16

Tiene que pasar el documento de marco flotante como un contexto para su selector, porque iframe tiene su propia separada árbol DOM:

$('#date', $('iframe').get(0).contentDocument); 

Con el fin de conseguir el acceso en el contenido del iframe, que se deben cargar desde mismo dominio como documento principal.


Sólo para elaborar aquí, .contentDocument propiedad funciona en Chrome (y FF), pero no en IE < 8. Usted tiene que usar .document.

+0

Yaggo, Gracias por su respuesta, ¿pueden elaborar un poco más? No estoy "entendiendo" lo que quiere decir accediendo al contexto del iFrame. Gracias, Doug –

+0

para elaborar aquí, la propiedad '.contentDocument' funciona en Chrome (y FF) pero no en IE. Tienes que usar '.document'. – Aliostad

21

Usted está buscando el método cd, documentado aquí: http://getfirebug.com/wiki/index.php/Command_Line_API

Aquí es un bookmarklet que utilizo para automatizar saltar en el marco flotante para cualquier aplicación de Facebook iframes. Debe proporcionar un ejemplo suficiente para modificar para su uso.

javascript:with(_FirebugCommandLine){cd($$(".canvas_iframe_util")[0].contentWindow)} 

Tenga en cuenta que with es generalmente una mala práctica, pero esto es literalmente cómo Firebug ejecuta lo que se teclea en la consola, así que imitaba eso.

Después de ejecutar esto, todo lo que escriba en la línea de comandos se ejecutará en el contexto del iframe.

+3

Esto es genio. Gracias por compartir ese fragmento. Hace que el desarrollo de la aplicación iframe de Facebook sea mucho más fácil. –

+4

Para aclarar, si está en la consola Firebug, todo lo que necesita es el cd (iframedom.contentWindow) –

+0

Sí, aunque un bookmarklet es una herramienta muy útil para esto. – bcherry