2008-08-29 8 views
8

Ich möchte eine iframe nehmen so viel vertikalen Raum wie es braucht, um seinen Inhalt anzuzeigen und keine Bildlaufleiste anzuzeigen. Ist es überhaupt möglich?Erstellen eines iframe nehmen vertikalen Raum

Gibt es Workarounds?

body { 
    overflow-x: hidden; 
    overflow-y: hidden; 
} 

ich sicher, dass es dauern bin nicht so viel vertikalen Raum über, wie es braucht, noch nicht, aber ich werde sehen, ob ich kann nicht verstehen:

Antwort

10

Dies sollte die IFRAME Höhe auf den Inhalt der Höhe eingestellt: die Bildlaufleisten auszuschalten

<script type="text/javascript"> 
the_height = document.getElementById('the_iframe').contentWindow.document.body.scrollHeight; 
document.getElementById('the_iframe').height = the_height; 
</script> 

Möglicherweise möchten Sie scrolling="no" zu Ihrem IFRAME hinzuzufügen.

bearbeiten: Hoppla, vergessen zu erklären the_height.

+4

Sehr praktisch, Prost. Vielleicht ist es erwähnenswert, dass dies nicht so gut funktioniert, wenn der iframe aufgrund der gleichen Ursprungsrichtlinie in einer anderen Domäne ist – ConroyP

0

sollte Dieser CSS-Schnipsel die vertikale Bildlaufleiste entfernen es aus.

0

Hinzufügen einer DOCTYPE Erklärung zum IFRAME Quelldokument wird helfen, den richtigen Wert aus der Leitung

document.getElementById('the_iframe').contentWindow.document.body.scrollHeight 

W3C DOCTYPE for examples siehe

berechnen ich Probleme mit IE und FF, wie es war Rendering der iframe Dokument in "Quirks" -Modus, bis ich die DOCTYPE hinzugefügt.

FF/IE/Chrome-Unterstützung: Die .scrollHeight funktioniert nicht mit Chrome. Daher habe ich ein JavaScript-Beispiel mit jQuery erstellt, um alle IFRAME Höhen auf einer Seite basierend auf dem Iframes-Inhalt festzulegen. Hinweis: Dies ist für Referenzseiten innerhalb Ihrer aktuellen Domäne.

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('iframe').each(function(){ 
      var context = $(this); 
      context.load(function(event){ // attach the onload event to the iframe 
       var body = $(this.contentWindow.document).find('body'); 
       if (body.length > 0 && $(body).find('*').length > 0) { // check if iframe has contents 
        context.height($(body.get(0)).height() + 20); 
       } else { 
        context.hide(); // hide iframes with no contents 
       } 
      }); 
     }); 
    }); 
</script> 
0

Die Abhilfe ist nicht und Vorprozess Code serverseitig zu verwenden.

+2

Dies ist nicht immer möglich, es sei denn, Sie werden einen benutzerdefinierten Proxyserver erstellen, der Links in der html Körper ... was ein Witz ist. – ErikE