2012-06-08 15 views
11

Mam plik, nazwijmy go parent-win.html, obsługiwany przez domenę example.com. Ten plik zawiera jquery. Element iframe, nazwijmy go iframe-win.html, jest osadzony na tej stronie. iframe-win.html ma element formularza o identyfikatorze form-elem i wartości Hello World!. Teraz wykonuję wewnątrz iframe.Jak używać jquery od rodzica wewnątrz elementu iframe?

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

Według mojej ograniczonej wiedzy JS powinien widzę Hello World! na konsoli lecz widzę niezdefiniowane. Teraz moje pytanie brzmi: czy muszę ponownie załadować jquery w elemencie iframe, czy mogę użyć obiektu jquery już załadowanego w oknie nadrzędnym?

Należy zauważyć, że nie jest to zwykły dostęp do elementu iframe/parent z elementu nadrzędnego/elementu iframe.

+0

możliwy duplikat [Dostęp do biblioteki jQuery z elementu iframe] (http://stackoverflow.com/questions/5481613/access-jquery-library-from-iframe) –

Odpowiedz

24

spróbować tego w iframe:

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

Tego właśnie szukałem! Właśnie zapytałem kolegę, czy muszę przekazać element iframe jako kontekst do jQuery. Dzięki Moin! – Kumar

+6

Ta odpowiedź nie uwzględnia wszystkich innych typów argumentów, które funkcja jQuery może zawierać oprócz selektora ciągów znaków. – thwd

+0

Znalazłem używanie dokumentu lepiej niż przy użyciu iframebody: return parent.jQuery (selektor, dokument) – boisvert

1

Musisz załadować jQuery wewnątrz iframe.

EDYCJA: Okay, jeśli ramka nie znajduje się w tej samej domenie, musisz , a nie trzeba ponownie załadować jQuery. Zobacz Access jQuery library from iframe

+0

Wiem. Ale jeśli konsola jonowa console.log w powyższym przykładzie pokazuje obiekt jQuery. Ponadto mogę uzyskać dostęp do obiektu z obiektu nadrzędnego za pomocą parent.object(), to dlaczego nie jQuery? – Kumar

+0

Thom Smith, przeczytaj odpowiedź, z którą połączyłeś się ponownie, jeśli element iframe znajduje się w innej domenie, musisz załadować jQuery. – dimention

+0

Odpowiedź połączona z programem nie działa, zobacz komentarze do niej. – boisvert

5

Oto lepsze rozwiązanie w oparciu o odpowiedzi na moin za:

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

Więc możemy użyć $ 's funkcje jak $ .get, $ .extends, itp.

+0

i działa również w 'head', podczas gdy odpowiedź Moina musi być umieszczona wewnątrz' body' – cske

Powiązane problemy