2012-10-13 16 views
9

Próbuję dynamicznie zmieniać rozmiar elementu iframe w celu dopasowania do jego treści. Aby to zrobić, mam kod:Zmiana rozmiaru elementu iframe na treść za pomocą Jquery

$("#IframeId").height($("#IframeId").contents().find("html").height());​ 

To nie działa. Czy to z powodu problemu z wieloma domenami? Jak mogę to dopasować? Proszę spojrzeć na Fiddle: JsFiddle

ps mam ustawić html i ciało link height:100%;

+0

Zapomniałem wspomnieć, że na url: moskah/links można zapisać linki takie jak: http: // facebook.com Spróbuj, zrozumiesz, że lista będzie się powiększać. – Youss

+0

Zobacz także w ten sposób za pomocą prostego skryptu javascript: http://stackoverflow.com/questions/9162933/make-iframe-height-dynamic-based-on-content -inside-jquery-javascript/9163087 # 9163087 – Aristos

Odpowiedz

12

Trzeba tylko zastosować kod na razie iframe load, więc wysokość jest już znana w tym czasie, kod następująco:

$("#IframeId").load(function() { 
    $(this).height($(this).contents().find("body").height()); 
}); 

Zobacz pracę demo. To demo działa na jsfiddle, ponieważ ustawiłem adres URL elementu iframe na adres URL w tej samej domenie, co element iframe wynikowy jsfiddle, czyli domena fiddle.jshell.net.

UPDATE:
@Youss: Wydaje swoją stronę na dziwnego powodu nie uzyskania wysokość ciała w prawo, więc spróbuj użyć wysokość głównych elementów zamiast, jak to:

$(document).ready(function() { 
    $("#IframeId").load(function() { 
      var h = $(this).contents().find("ul.jq-text").height(); 
      h += $(this).contents().find("#form1").height(); 
      $(this).height(h); 
     }); 
}); 
+0

To nie działa na IE9. –

+0

Witam, to nie działa dla mnie ... spójrz na http://moskah.nl/er.html Wszystko to w tej samej domenie moskah.nl – Youss

+1

To działa dla mnie w zainstalowanych przeglądarkach, czyli w chrome 22 i firefox 15, nie testowałem IE, dziękuję za zgłoszenie. – Nelson

3

Co można zrobić, jest następujący:

  • W użycia iFrame document.parent .setHeight (myheight), aby ustawić wysokość w iFrame na rodzica. Co jest dozwolone, ponieważ jest kontrolą podrzędną. Wywołaj funkcję od rodzica.

  • W obiekcie nadrzędnym ustawia się funkcję setHeight (iframeheight), która zmienia rozmiar ramki iFrame.

Zobacz także:
How do I implement Cross Domain URL Access from an Iframe using Javascript?

+0

Cześć, naprawdę tego nie rozumiem i wydaje się, że jest to skomplikowane. Miałem nadzieję, że zmienię mały kod, który mam. W wielu przeglądarkach nie ma problemu, ponieważ strona z iframe jest moja. Właśnie o tym wspomniałem, ponieważ nie działałoby na JsFiddle (powinienem to wyjaśnić, moje złe). – Youss

+0

Czy to różne domeny? – Niels

+0

Tak jak powiedziałem, jest to ta sama domena (moskah.nl). – Youss

4

Nie wiem, dlaczego rozwiązanie @ Nelsona nie działało w Firefoksie 26 (Ubuntu), ale poniższe rozwiązanie Javascript-jQuery wydaje się działać w Chromium i Firefox.

/** 
* Called to resize a given iframe. 
* 
* @param frame The iframe to resize. 
*/ 
function resize(frame) { 
    var b = frame.contentWindow.document.body || frame.contentDocument.body, 
     cHeight = $(b).height(); 

    if(frame.oHeight !== cHeight) { 
    $(frame).height(0); 
    frame.style.height = 0; 

    $(frame).height(cHeight); 
    frame.style.height = cHeight + "px"; 

    frame.oHeight = cHeight; 
    } 

    // Call again to check whether the content height has changed. 
    setTimeout(function() { resize(frame); }, 250); 
} 

/** 
* Resizes all the iframe objects on the current page. This is called when 
* the page is loaded. For some reason using jQuery to trigger on loading 
* the iframe does not work in Firefox 26. 
*/ 
window.onload = function() { 
    var frame, 
     frames = document.getElementsByTagName('iframe'), 
     i = frames.length - 1; 

    while(i >= 0) { 
    frame = frames[i]; 
    frame.onload = resize(frame); 

    i -= 1; 
    } 
}; 

Powoduje to ciągłe zmienianie rozmiarów wszystkich elementów iframe na danej stronie.

Testowany z jQuery 1.10.2.

Używanie $('iframe').on('load', ... działałoby tylko sporadycznie. Należy zauważyć, że rozmiar musi początkowo być ustawiony na 0 pikseli wysokości, jeśli ma się kurczyć poniżej domyślnej wysokości iframe w niektórych przeglądarkach.

+0

+1 poprawiona odpowiedź – Nelson

0

Po prostu zrób to na tag HTML, działa idealnie

$("#iframe").load(function() { 
    $(this).height($(this).contents().find("html").height()); 
}); 
0

Regulacja wysokości iframe na obciążenia i zmiana rozmiaru, na podstawie jego wysokości ciała.

Powiązane problemy