2012-06-08 21 views
11

Tengo un archivo, vamos a llamarlo parent-win.html, servido por domain example.com. Este archivo tiene jquery incluido en él. Un iframe, vamos a llamarlo iframe-win.html, está incrustado en esta página. iframe-win.html tiene un elemento de formulario con id form-elem y valor Hello World!. Ahora lo hago siguiendo dentro de iframe.¿Cómo usar jquery desde el padre dentro de un iframe?

var jQuery = parent.jQuery; 
console.log(jQuery('#form-elem').val()); 

Según mi conocimiento limitado de JS debería ver Hello World! en la consola, pero en lugar de eso ver indefinido. Ahora, mi pregunta es ¿necesito cargar jquery nuevamente en un iframe o puedo utilizar el objeto jquery ya cargado en la ventana principal?

Tenga en cuenta que este no es el acceso habitual al contenido de iframe/principal de parent/iframe.

+0

posible duplicado de [Acceder a la biblioteca jQuery de iframe] (http://stackoverflow.com/questions/5481613/access-jquery-library-from-iframe) –

Respuesta

24

probar esto en el marco flotante:

if (typeof(jQuery) == "undefined") { 
    var iframeBody = document.getElementsByTagName("body")[0]; 
    var jQuery = function (selector) { return parent.jQuery(selector, iframeBody); }; 
    var $ = jQuery; 
} 
+0

¡Esto es lo que estaba buscando! Acabo de preguntarle a un colega si necesito pasar iframe como contexto para jQuery. Gracias Moin! – Kumar

+6

Esta respuesta no considera todos los otros tipos de argumentos que la función jQuery puede tomar además de un selector de cadenas. – thwd

+0

Encontré usar documento mejor que usar iframebody: return parent.jQuery (selector, documento) – boisvert

1

Necesita cargar jQuery dentro del iframe.

EDITAR: Bien, si el marco no está en el mismo dominio, entonces usted no tiene que volver a cargar jQuery. Ver Access jQuery library from iframe

+0

Eso lo sé. Pero si console.log jQuery en el ejemplo anterior, muestra el objeto jQuery. Además, puedo acceder a un objeto desde el padre utilizando parent.object(), ¿por qué no jQuery? – Kumar

+0

Thom Smith, lea la respuesta a la que se vinculó nuevamente, porque si el iframe está en un dominio diferente, DEBE cargar jQuery dentro de él. – dimention

+0

La respuesta vinculada a does not work, vea sus comentarios para más detalles. – boisvert

5

Aquí es una mejor solución basada en la respuesta de la Moin:

if (typeof(jQuery) == "undefined") { 
    window.jQuery = function (selector) { return parent.jQuery(selector, document); }; 
    jQuery = parent.$.extend(jQuery, parent.$); 
    window.$ = jQuery; 
} 

así que podemos usar $ 's funciones como $ .get, $ .extendido, etc.

+0

y también funciona en 'cabeza 'mientras que la respuesta de Moin debe ponerse dentro de' cuerpo' – cske

Cuestiones relacionadas