2011-05-13 33 views
12

Tengo una página con un iframe. mi página iframe es iframe.php y mi página principal es main.php cuando cargo iframe.php directamente mi código jquery se ejecuta bien, pero cuando cargo main.php (que contiene iframe.php como iframe) me sale un error ". $ no está definido ".

esto podría deberse a que tanto main.php y iframe.php utilizar

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script> 

si es así, ¿cómo puedo usar jQuery en la página iframe sin incluir esta línea?

+0

¿Es posible que tenga un código en main.php fuera del iframe que está fallando? ¿Has intentado comentar temporalmente el cuadro y ver si el resto del código en main.php funciona normalmente? – RMorrisey

+2

Sé que hay algunos problemas con javacsript y iFrames relacionados con el documento principal ... Creo que si el documento fuente del iFrame está dentro del mismo dominio que el documento principal, entonces iFrame hereda el javascript del documento principal, de lo contrario lo hace no. No tengo idea si esto es exacto ... pero mi punto es, ¿qué sucede cuando te deshaces de la referencia jquery en el documento iframe? –

+0

Cuando comento el iFrame, la página main.php no tiene errores. es raro cuando elimino todo el javascript de iframe.php, excepto el jquery, incluido, obtengo este error Error: c.defaultView.getComputedStyle (h, null) es nulo Archivo de origen: http://code.jquery.com/jquery-latest.pack.js Línea: 16 –

Respuesta

14

Me di cuenta. En el marco flotante Solía ​​

var $ = parent.$; 

, así como la concesión de jQuery llama el documento de contexto. es decir

$("#element", document).doStuff(); 

Es raro, porque la forma original, lo tenía (con jQuery incluye en ambas páginas) funcionó bien en Safari para Mac, pero en Firefox que me dio el error

Error: c.defaultView.getComputedStyle(h, null) is null Source File: http://code.jquery.com/jquery-latest.pack.js Line: 16

+0

¡No olvides 'aceptar' esta respuesta! –

2

Malas noticias: no puede usar Jquery a menos que esté en el documento. Entonces, vas a tener que cargarlo independientemente.

En realidad, no hay ningún problema al incluir la llamada jquery en ambos documentos. Tengo varios clientes que iFrame una parte de la aplicación de mi empresa para automatización de marketing (que lo tiene incluido) y también he incluido Jquery en su documento principal, y funciona perfectamente sin conflictos. Desde el punto de vista de la carga, suponiendo que esté configurado correctamente, el golpe será insignificante debido al almacenamiento en caché. Entonces, incluye lejos.

Regla de oro en iFrames ... piense en ellas como páginas separadas dentro de su página. Sí, en algunos casos las cosas se trasladan, pero el modelo de origen del documento impide que cosas como CSS se crucen entre padres e hijos.

2

Estaba preparando iframe en una página web y que pude encontrar $ objeto utilizando

var $ = parent.$; 

pero esto fue no realizar la selección de los elementos de marco flotante. Encontrado debajo de código para ejecutar selector en el cuerpo iFrame

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

De alguna manera el objeto de documento fue también undefined.

Fuente del código anterior: https://gist.github.com/843229

Espero que ayuda a alguien.