J'ai besoin d'une solution pour ajuster automatiquement le width
et height
d'un iframe
pour s'adapter à peine à son contenu. Le fait est que la largeur et la hauteur peuvent être modifiées après le iframe
chargement du. Je suppose que j'ai besoin d'une action d'événement pour faire face au changement de dimensions du corps contenu dans l'iframe.
javascript
html
iframe
adjustment
Cœur de pierre
la source
la source
Réponses:
la source
DOMContentLoaded
, carDOMContentReady
cela ne semble pas être une chose: developer.mozilla.org/en-US/…Plug-in jQuery inter-navigateurs .
Cross-bowser, bibliothèque inter-domaines qui utilise
mutationObserver
pour maintenir la taille de l'iFrame au contenu etpostMessage
pour communiquer entre l'iFrame et la page hôte. Fonctionne avec ou sans jQuery.la source
Toutes les solutions proposées jusqu'à présent ne représentent qu'un redimensionnement unique. Vous mentionnez que vous souhaitez pouvoir redimensionner l'iFrame après la modification du contenu. Pour ce faire, vous devez exécuter une fonction à l'intérieur de l'iFrame (une fois le contenu modifié, vous devez déclencher un événement pour dire que le contenu a changé).
J'étais coincé avec cela pendant un certain temps, car le code à l'intérieur de l'iFrame semblait limité au DOM à l'intérieur de l'iFrame (et ne pouvait pas modifier l'iFrame), et le code exécuté en dehors de l'iFrame était coincé avec le DOM à l'extérieur de l'iFrame (et ne pouvait pas '' t prendre un événement venant de l'intérieur de l'iFrame).
La solution est venue de découvrir (via l'aide d'un collègue) que jQuery peut être informé du DOM à utiliser. Dans ce cas, le DOM de la fenêtre parent.
En tant que tel, un code tel que celui-ci fait ce dont vous avez besoin (lorsqu'il est exécuté à l'intérieur de l'iFrame):
la source
jQuery("#IDofControlFiringResizeEvent").click(function ()
?solution à une doublure pour les incrustations: commence par une taille minimale et augmente jusqu'à la taille du contenu. pas besoin de balises de script.
la source
scrollHeight/scrollWidth
devraient être ajustées un peu pour tenir compte des marges corporelles. Les navigateurs appliquent des marges non nulles par défaut pour l'élément de corps des documents (et cela s'applique également au contenu chargé dans des cadres). La solution de travail que je trouve est d'ajouter ceci:parseInt(window.getComputedStyle(this.contentDocument.body).margin
.Si le contenu iframe provient du même domaine, cela devrait fonctionner parfaitement. Il nécessite cependant jQuery.
Pour le redimensionner dynamiquement, vous pouvez procéder comme suit:
Ensuite, sur la page que l'iframe charge, ajoutez ceci:
la source
Voici une solution multi-navigateur si vous ne souhaitez pas utiliser jQuery:
la source
Après avoir tout essayé sur terre, cela fonctionne vraiment pour moi.
index.html
la source
J'utilise ce code pour ajuster automatiquement la hauteur de tous les iframes (avec la classe autoHeight) lorsqu'ils se chargent sur la page. Testé et fonctionne sous IE, FF, Chrome, Safari et Opera.
la source
Ceci est une solution solide à l'épreuve
le html
la source
J'ai légèrement modifié la grande solution de Garnaph ci-dessus. Il semblait que sa solution avait modifié la taille de l'iframe en fonction de la taille juste avant l'événement. Pour ma situation (soumission par e-mail via un iframe), j'avais besoin que la hauteur de l'iframe change juste après la soumission. Par exemple, affichez les erreurs de validation ou le message de remerciement après la soumission.
Je viens d'éliminer la fonction click () imbriquée et de la placer dans mon iframe html:
A fonctionné pour moi, mais je ne suis pas sûr de la fonctionnalité multi-navigateur.
la source
Si vous pouvez contrôler à la fois le contenu IFRAME et la fenêtre parente, vous avez besoin de l' iFrame Resizer .
Cette bibliothèque permet le redimensionnement automatique de la hauteur et de la largeur des iFrames identiques et inter-domaines pour s'adapter à leur contenu. Il fournit une gamme de fonctionnalités pour résoudre les problèmes les plus courants liés à l'utilisation des iFrames, notamment:
la source
tous ne peuvent pas fonctionner en utilisant les méthodes ci-dessus.
javascript:
html:
Env: IE 10, Windows 7 x64
la source
J'ai trouvé une autre solution après quelques expériences. À l'origine, j'ai essayé le code marqué comme «meilleure réponse» à cette question et cela n'a pas fonctionné. Je suppose que mon iframe dans mon programme à l'époque a été généré dynamiquement. Voici le code que j'ai utilisé (cela a fonctionné pour moi):
Javascript à l'intérieur de l'iframe en cours de chargement:
Voici le html pour l'iframe:
Voici tout le code dans mon iframe:
J'ai fait des tests en chrome et un peu en firefox (sous windows xp). J'ai encore plus de tests à faire, alors dites-moi comment cela fonctionne pour vous.
la source
Voici comment je le ferais (testé en FF / Chrome):
la source
Voici plusieurs méthodes:
ET UNE AUTRE ALTERNATIVE
CACHER LE DÉFILEMENT AVEC 2 ALTERNATIVES COMME INDIQUÉ CI-DESSUS
HACK AVEC LE SECOND CODE
Pour masquer les barres de défilement de l'iFrame, le parent est fait "overflow: hidden" pour masquer les barres de défilement et l'iFrame est fait pour aller jusqu'à 150% de largeur et de hauteur, ce qui force les barres de défilement à l'extérieur de la page et puisque le corps ne fait pas '' t avoir des barres de défilement on ne peut pas s'attendre à ce que l'iframe dépasse les limites de la page. Cela cache les barres de défilement de l'iFrame avec toute la largeur!
source: définir la hauteur automatique iframe
la source
Au cas où quelqu'un arriverait ici: j'ai eu un problème avec les solutions lorsque j'ai supprimé les divs de l'iframe - l'iframe n'a pas raccourci.
Il existe un plugin Jquery qui fait le travail:
http://www.jqueryscript.net/layout/jQuery-Plugin-For-Auto-Resizing-iFrame-iFrame-Resizer.html
la source
J'ai trouvé que ce redimensionneur fonctionnait mieux:
Notez que l'objet de style est supprimé.
la source
Dans jQuery, c'est la meilleure option pour moi, ça m'aide vraiment !! J'attends que ça vous aide!
iframe
jQuery
la source
Le contexte
J'ai dû le faire moi-même dans le cadre d'une extension Web. Cette extension Web injecte une partie de l'interface utilisateur dans chaque page, et cette interface utilisateur vit à l'intérieur d'un
iframe
. Le contenu à l'intérieur duiframe
est dynamique, j'ai donc dû réajuster la largeur et la hauteur deiframe
lui - même.J'utilise React mais le concept s'applique à toutes les bibliothèques.
Ma solution (cela suppose que vous contrôlez à la fois la page et l'iframe)
À l'intérieur,
iframe
j'ai changé debody
style pour avoir de très grandes dimensions. Cela permettra aux éléments à l'intérieur de se disposer en utilisant tout l'espace nécessaire. Fairewidth
etheight
100% n'a pas fonctionné pour moi (je suppose que l'iframe a un défautwidth = 300px
etheight = 150px
)Ensuite, j'ai injecté toute l'interface utilisateur iframe dans un div et lui ai donné quelques styles
Après avoir rendu mon application à l'intérieur
#ui-root
(dans React, je le fais à l'intérieurcomponentDidMount
), je calcule les dimensions de ce div comme et les synchronise avec la page parent en utilisantwindow.postMessage
:Dans le cadre parent, je fais quelque chose comme ceci:
la source
Il est possible de créer un IFrame "fantôme" qui agit comme s'il n'était pas là.
Voir http://codecopy.wordpress.com/2013/02/22/ghost-iframe-crossdomain-iframe-resize/
Fondamentalement, vous utilisez le système d'événements
parent.postMessage(..)
décrit dans https://developer.mozilla.org/en-US/docs/DOM/window.postMessageCela fonctionne avec tous les navigateurs modernes!
la source
Je sais que le message est ancien, mais je crois que c'est encore une autre façon de le faire. Je viens de mettre en œuvre mon code. Fonctionne parfaitement à la fois au chargement de la page et au redimensionnement de la page:
la source
Javascript à placer dans l'en-tête:
Voici le code html iframe:
Feuille de style CSS
>
la source
Pour l'attribut de directive angularjs:
Remarquez le pourcentage, je l'ai inséré afin que vous puissiez contrer la mise à l'échelle habituellement effectuée pour les iframe, le texte, les annonces, etc., mettez simplement 0 si aucune mise à l'échelle n'est implémentée
la source
C'est comme ça que je l'ai fait en charge ou quand les choses changent.
la source
De toute évidence, il y a beaucoup de scénarios, cependant, j'avais le même domaine pour le document et l'iframe et j'ai pu aborder cela jusqu'à la fin de mon contenu iframe:
Cela «trouve» le conteneur parent, puis définit la longueur en ajoutant un facteur de fudge de 50 pixels pour supprimer la barre de défilement.
Il n'y a rien pour «observer» le changement de hauteur du document, ce dont je n'avais pas besoin pour mon cas d'utilisation. Dans ma réponse, j'apporte un moyen de référencer le conteneur parent sans utiliser d'ID cuits dans le contenu parent / iframe.
la source
Si vous pouvez vivre avec un rapport hauteur / largeur fixe et que vous souhaitez un iframe réactif , ce code vous sera utile. Ce ne sont que des règles CSS.
L'iframe doit avoir un div comme conteneur.
Le code source est basé sur ce site et Ben Marshall a une bonne explication.
la source
Simplicité:
la source
Si le contenu est juste un html très simple, le moyen le plus simple est de supprimer l'iframe avec javascript
Code HTML:
Code Javascript:
la source
la source