Ich brauche eine Lösung zum automatischen Anpassen des width
und height
eines iframe
, um seinen Inhalt kaum anzupassen . Der Punkt ist, dass die Breite und Höhe geändert werden können, nachdem das iframe
geladen wurde. Ich brauche wohl eine Ereignisaktion, um mit der Änderung der Dimensionen des im Iframe enthaltenen Körpers fertig zu werden.
javascript
html
iframe
adjustment
Steinherz
quelle
quelle
Antworten:
quelle
DOMContentLoaded
, daDOMContentReady
scheint keine Sache zu sein: developer.mozilla.org/en-US/…Browserübergreifendes jQuery-Plug-In .
Cross-Browser, domänenübergreifende Bibliothek , die verwendet wird
mutationObserver
, um die Größe von iFrame an den InhaltpostMessage
anzupassen und zwischen iFrame und Hostseite zu kommunizieren. Funktioniert mit oder ohne jQuery.quelle
Alle bisher angegebenen Lösungen berücksichtigen nur eine einmalige Größenänderung. Sie erwähnen, dass Sie die Größe des iFrame ändern möchten, nachdem der Inhalt geändert wurde. Dazu müssen Sie eine Funktion im iFrame ausführen (sobald der Inhalt geändert wurde, müssen Sie ein Ereignis auslösen, um anzuzeigen, dass sich der Inhalt geändert hat).
Ich blieb eine Weile dabei, da der Code im iFrame auf das DOM im iFrame beschränkt zu sein schien (und den iFrame nicht bearbeiten konnte) und der außerhalb des iFrame ausgeführte Code mit dem DOM außerhalb des iFrame hängen blieb (und nicht konnte). t ein Ereignis aus dem iFrame aufnehmen).
Die Lösung ergab sich aus der Entdeckung (mithilfe eines Kollegen), dass jQuery mitgeteilt werden kann, welches DOM verwendet werden soll. In diesem Fall das DOM des übergeordneten Fensters.
Code wie dieser macht also das, was Sie brauchen (wenn er im iFrame ausgeführt wird):
quelle
jQuery("#IDofControlFiringResizeEvent").click(function ()
?Einzeiler-Lösung für Einbettungen: Beginnt mit einer Mindestgröße und erhöht sich auf die Inhaltsgröße. Keine Notwendigkeit für Skript-Tags.
quelle
scrollHeight/scrollWidth
sollten etwas angepasst werden, um die Körperränder zu berücksichtigen. Browser wenden Standardränder ungleich Null für das Textelement von Dokumenten an (und dies gilt auch für Inhalte, die in Frames geladen werden). Die funktionierende Lösung, die ich gefunden habe, besteht darin, Folgendes hinzuzufügen :parseInt(window.getComputedStyle(this.contentDocument.body).margin
.Wenn der Iframe-Inhalt aus derselben Domain stammt, sollte dies hervorragend funktionieren. Es erfordert jedoch jQuery.
Um die Größe dynamisch zu ändern, können Sie Folgendes tun:
Fügen Sie dann auf der Seite, die der Iframe lädt, Folgendes hinzu:
quelle
Hier ist eine browserübergreifende Lösung, wenn Sie jQuery nicht verwenden möchten:
quelle
Nachdem ich alles auf der Erde ausprobiert habe, funktioniert das wirklich für mich.
index.html
quelle
Ich verwende diesen Code, um die Höhe aller Iframes (mit der Klasse autoHeight) automatisch anzupassen, wenn sie auf einer Seite geladen werden. Getestet und funktioniert in IE, FF, Chrome, Safari und Opera.
quelle
Dies ist eine solide Proof-Lösung
das HTML
quelle
Ich habe Garnaphs großartige Lösung oben leicht modifiziert. Es schien, als hätte seine Lösung die Iframe-Größe basierend auf der Größe unmittelbar vor dem Ereignis geändert. Für meine Situation (E-Mail-Übermittlung über einen Iframe) musste sich die Iframe-Höhe direkt nach der Übermittlung ändern. Zeigen Sie beispielsweise Validierungsfehler oder eine "Danke" -Nachricht nach der Übermittlung an.
Ich habe gerade die verschachtelte click () -Funktion entfernt und sie in mein iframe-HTML eingefügt:
Hat für mich funktioniert, bin mir aber nicht sicher, ob es sich um eine browserübergreifende Funktionalität handelt.
quelle
Wenn Sie sowohl den IFRAME-Inhalt als auch das übergeordnete Fenster steuern können, benötigen Sie den iFrame Resizer .
Diese Bibliothek ermöglicht die automatische Größenänderung von Höhe und Breite derselben und domänenübergreifender iFrames, um sie an den enthaltenen Inhalt anzupassen. Es bietet eine Reihe von Funktionen, mit denen die häufigsten Probleme bei der Verwendung von iFrames behoben werden können. Dazu gehören:
quelle
Alle können mit den oben genannten Methoden nicht arbeiten.
Javascript:
html:
Env: IE 10, Windows 7 x64
quelle
Nach einigem Experimentieren fand ich eine andere Lösung. Ich habe ursprünglich versucht, den Code als "beste Antwort" auf diese Frage zu kennzeichnen, und es hat nicht funktioniert. Ich vermute, dass mein Iframe in meinem Programm zu diesem Zeitpunkt dynamisch generiert wurde. Hier ist der Code, den ich verwendet habe (er hat bei mir funktioniert):
Javascript im Iframe, der geladen wird:
Hier ist das HTML für den Iframe:
Hier ist der gesamte Code in meinem Iframe:
Ich habe Tests in Chrom und ein wenig in Firefox (in Windows XP) durchgeführt. Ich muss noch weitere Tests durchführen. Bitte sagen Sie mir, wie dies für Sie funktioniert.
quelle
So würde ich es machen (getestet in FF / Chrome):
quelle
Hier sind verschiedene Methoden:
UND EINE ANDERE ALTERNATIVE
SCROLLING MIT 2 ALTERNATIVEN WIE OBEN VERSTECKT
HACK MIT ZWEITEM CODE
Um die Bildlaufleisten des iFrame auszublenden, wird das übergeordnete Element zum Überblenden: ausgeblendet: ausgeblendet, um die Bildlaufleisten auszublenden, und der iFrame wird auf eine Breite und Höhe von bis zu 150% eingestellt, wodurch die Bildlaufleisten außerhalb der Seite gezwungen werden und der Körper dies nicht tut. Wenn Sie keine Bildlaufleisten haben, dürfen Sie nicht erwarten, dass der Iframe die Grenzen der Seite überschreitet. Dadurch werden die Bildlaufleisten des iFrame in voller Breite ausgeblendet!
Quelle: Stellen Sie die automatische Höhe des Iframes ein
quelle
Für den Fall, dass jemand hierher kommt: Ich hatte ein Problem mit den Lösungen, als ich Divs aus dem Iframe entfernte - der Iframe wurde nicht kürzer.
Es gibt ein Jquery-Plugin, das die Arbeit erledigt:
http://www.jqueryscript.net/layout/jQuery-Plugin-For-Auto-Resizing-iFrame-iFrame-Resizer.html
quelle
Ich fand, dass dieser Resizer besser funktioniert:
Beachten Sie, dass das Stilobjekt entfernt wurde.
quelle
In jQuery ist dies die beste Option für mich, die mir wirklich hilft !! Ich warte, das hilft dir!
iframe
jQuery
quelle
Kontext
Ich musste dies selbst im Rahmen einer Web-Erweiterung tun. Diese Web-Erweiterung fügt jeder Seite einen Teil der Benutzeroberfläche hinzu, und diese Benutzeroberfläche befindet sich in einer
iframe
. Der Inhalt imiframe
ist dynamisch, daher musste ich die Breite und Höhe desiframe
selbst neu einstellen .Ich benutze React, aber das Konzept gilt für jede Bibliothek.
Meine Lösung (dies setzt voraus, dass Sie sowohl die Seite als auch den Iframe steuern)
Innerhalb des habe
iframe
ichbody
Stile geändert , um wirklich große Dimensionen zu haben. Auf diese Weise können die Elemente im Inneren mit dem erforderlichen Platz angeordnet werden. Makingwidth
undheight
100% haben bei mir nicht funktioniert (ich denke, weil der Iframe einen Standard hatwidth = 300px
undheight = 150px
)Dann habe ich die gesamte Iframe-Benutzeroberfläche in ein Div eingefügt und ihm einige Stile gegeben
Nachdem ich meine App darin gerendert habe
#ui-root
(in React mache ich das drinnencomponentDidMount
), berechne ich die Dimensionen dieses Divs wie folgt und synchronisiere sie mit der übergeordneten Seite mitwindow.postMessage
:Im übergeordneten Frame mache ich so etwas:
quelle
Es ist möglich, einen "geisterhaften" IFrame zu erstellen, der sich so verhält, als wäre er nicht da.
Siehe http://codecopy.wordpress.com/2013/02/22/ghost-iframe-crossdomain-iframe-resize/
Grundsätzlich verwenden Sie das
parent.postMessage(..)
in https://developer.mozilla.org/en-US/docs/DOM/window.postMessage beschriebene EreignissystemDies funktioniert in allen modernen Browsern!
quelle
Ich weiß, dass der Beitrag alt ist, aber ich glaube, dass dies ein weiterer Weg ist, dies zu tun. Ich habe gerade meinen Code implementiert. Funktioniert perfekt sowohl beim Laden von Seiten als auch beim Ändern der Seitengröße:
quelle
Javascript, das in den Header eingefügt werden soll:
Hier geht iframe HTML-Code:
CSS-Stylesheet
>
quelle
Für das Angularjs-Direktivenattribut:
Beachten Sie den Prozentsatz, ich habe ihn eingefügt, damit Sie der Skalierung entgegenwirken können, die normalerweise für Iframe, Text, Anzeigen usw. durchgeführt wird. Geben Sie einfach 0 ein, wenn keine Skalierung implementiert ist
quelle
So habe ich es beim Laden gemacht oder wenn sich die Dinge ändern.
quelle
Natürlich gibt es viele Szenarien, aber ich hatte dieselbe Domain für Dokument und Iframe und konnte dies bis zum Ende meines Iframe-Inhalts angehen:
Dadurch wird der übergeordnete Container 'gefunden' und anschließend die Länge auf einen Fudge-Faktor von 50 Pixel festgelegt, um die Bildlaufleiste zu entfernen.
Es gibt dort nichts, um die Änderung der Dokumenthöhe zu beobachten. Dies brauchte ich für meinen Anwendungsfall nicht. In meiner Antwort bringe ich ein Mittel zum Verweisen auf den übergeordneten Container mit, ohne IDs zu verwenden, die in den übergeordneten / iframe-Inhalt eingebrannt sind.
quelle
Wenn Sie mit einem festen Seitenverhältnis leben können und einen reaktionsfähigen Iframe wünschen, ist dieser Code für Sie hilfreich. Es sind nur CSS-Regeln.
Der Iframe muss ein div als Container haben.
Der Quellcode basiert auf dieser Site und Ben Marshall hat eine gute Erklärung.
quelle
Einfachheit:
quelle
Wenn der Inhalt nur ein sehr einfaches HTML ist, ist der einfachste Weg, den Iframe mit Javascript zu entfernen
HTML Quelltext:
Javascript-Code:
quelle
quelle