2012-06-08 12 views
11

Ho un file, chiamiamolo parent-win.html, servito dal dominio example.com. Questo file include jquery. Un iframe, chiamiamolo iframe-win.html, è incorporato in questa pagina. iframe-win.html ha un elemento modulo con ID form-elem e valore Hello World!. Ora lo seguo all'interno di iframe.Come usare jquery dal genitore all'interno di un iframe?

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

Secondo la mia limitata conoscenza di JS dovrei vedere Hello World! su console, ma invece vedo indefinito. Ora, la mia domanda è ho bisogno di caricare jquery di nuovo in un iframe o posso utilizzare l'oggetto jQuery già caricato nella finestra padre?

Si noti che questo non è il solito accesso ai contenuti iframe/genitore da genitore/iframe.

+0

possibile duplicato di [Accesso alla libreria jQuery da iframe] (http://stackoverflow.com/questions/5481613/access-jquery-library-from-iframe) –

risposta

24

provare questo nel iframe:

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

Questo è quello che stavo cercando! Ho appena chiesto a un collega se ho bisogno di passare iframe come contesto per jQuery. Grazie Moin! – Kumar

+6

Questa risposta non considera tutti gli altri tipi di argomenti che la funzione jQuery può utilizzare oltre a un selettore di stringhe. – thwd

+0

Ho trovato che l'uso del documento è migliore rispetto all'utilizzo di iframebody: return parent.jQuery (selettore, documento) – boisvert

1

È necessario caricare jQuery all'interno di iframe.

MODIFICA: Va bene, se il frame non è nello stesso dominio, allora lo non è necessario ricaricare jQuery. Vedere Access jQuery library from iframe

+0

Che io sappia. Ma se console.log jQuery nell'esempio sopra riportato mostra l'oggetto jQuery. Inoltre posso accedere ad un oggetto dal genitore usando parent.object(), allora perché non jQuery? – Kumar

+0

Thom Smith, leggi la risposta a cui ti sei ricollegato, perché se l'iframe si trova in un dominio diverso, devi caricare jQuery al suo interno. – dimention

+0

La risposta collegata a non funziona, vedere i suoi commenti per i dettagli. – boisvert

5

Ecco una soluzione migliore in base alla risposta del Moin:

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

Così possiamo usare 's $ funzioni come $ .get, $ .extends, ecc.

+0

e funziona anche in 'head' mentre la risposta di Moin deve essere inserita all'interno di' body' – cske

Problemi correlati