2012-06-08 15 views
11

Ich habe eine Datei, nennen wir es Parent-Win.html, serviert von der Domain example.com. Diese Datei enthält jquery. Ein Iframe, nennen wir es iframe-win.html, ist in diese Seite eingebettet. iframe-win.html hat ein Formularelement mit der ID form-elem und dem Wert Hello World!. Jetzt folge ich dem Iframe.Wie verwendet man jquery von Eltern in einem iframe?

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

Nach meiner begrenzten Kenntnis von JS soll ich Hello World! auf der Konsole sehen, sondern ich sehe nicht definiert. Nun, meine Frage ist, muss ich jquery wieder in einem iframe laden oder kann ich jquery-Objekt bereits im übergeordneten Fenster geladen verwenden?

Beachten Sie, dass dies nicht wie üblich Zugriff iframe/Eltern Inhalt von Eltern/Iframe ist.

+0

möglich Duplikat von [Access jQuery-Bibliothek von iframe] (http://StackOverflow.com/Questions/5481613/Access-Jquery-Library-from-Iframe) –

Antwort

24

versuchen, dies in der iframe:

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

Das ist, was ich gesucht habe! Ich habe gerade einen Kollegen gefragt, ob ich iframe als Kontext zu jQuery übergeben muss. Danke Moin! – Kumar

+6

Diese Antwort berücksichtigt nicht alle anderen Argumenttypen, die die jQuery-Funktion neben einem String-Selektor verwenden kann. – thwd

+0

Ich fand Dokument besser als mit iframebody: return parent.jQuery (Selektor, Dokument) – boisvert

1

Sie müssen jQuery innerhalb der iframe laden.

EDIT: Okay, wenn der Rahmen nicht auf der gleichen Domain ist, dann müssen Sie nicht müssen jQuery neu laden. Siehe Access jQuery library from iframe

+0

Das weiß ich. Aber wenn Sie in dem oben angegebenen Beispiel console.log jQuery verwenden, wird das jQuery-Objekt angezeigt. Außerdem kann ich auf ein Objekt von Eltern mit parent.object() zugreifen, warum nicht jQuery? – Kumar

+0

Thom Smith, lesen Sie die Antwort, die Sie wieder verknüpft haben, denn wenn der Iframe auf einer anderen Domäne ist, müssen Sie jQuery darin laden. – dimention

+0

Die verknüpfte Antwort funktioniert nicht. Weitere Informationen finden Sie in den Kommentaren. – boisvert

5

Hier ist eine bessere Lösung auf die Antwort des Moin basiert:

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

So können wir $ 's-Funktionen wie $ .get verwenden, $ .Extends usw.

+0

und funktioniert auch in "Kopf", während Moins Antwort in "Körper" gesetzt werden muss – cske

Verwandte Themen