Je charge une page Web aspx dans un iframe. Le contenu de l'Iframe peut être plus haut que la hauteur de l'Iframe. L'iframe ne doit pas avoir de barres de défilement.
J'ai une div
balise wrapper à l'intérieur de l'iframe qui est essentiellement tout le contenu. J'ai écrit quelques jQuery pour que le redimensionnement se produise:
$("#TB_window", window.parent.document).height($("body").height() + 50);
où
TB_window
est le div dans lequel il Iframe
est contenu.
body
- la balise body de l'aspx dans l'iframe.
Ce script est attaché au contenu iframe. J'obtiens l' TB_window
élément de la page parent. Bien que cela fonctionne bien sur Chrome, mais TB_window s'effondre dans Firefox. Je suis vraiment confus / perdu sur pourquoi cela se produit.
javascript
jquery
asp.net
iframe
karry
la source
la source
Réponses:
Vous pouvez récupérer la hauteur du
IFRAME
contenu de en utilisant:contentWindow.document.body.scrollHeight
Une fois le
IFRAME
fichier chargé, vous pouvez modifier la hauteur en procédant comme suit:Ensuite, sur la
IFRAME
balise, vous connectez le gestionnaire comme ceci:Il y a quelque temps, j'ai eu une situation où j'avais également besoin d'appeler
iframeLoaded
deIFRAME
lui - même après qu'une soumission de formulaire eut eu lieu à l'intérieur. Vous pouvez accomplir cela en procédant comme suit dans lesIFRAME
scripts de contenu de:la source
X-FRAME-OPTIONS
pour ajouter une ligne comme:Response.AddHeader("X-FRAME-OPTIONS", "SAMEORIGIN");
ouresponse.addHeader("X-FRAME-OPTIONS", "Allow-From https://some.othersite.com");
iFrameID.height = "";
àiFrameID.height = "20px";
. La hauteur par défaut de l'iframe du navigateur est de 150 pixels, ce qui la""
réinitialise.Une réponse légèrement améliorée à Aristos ...
Déclarez ensuite dans votre iframe comme suit:
Il y a deux améliorations mineures:
iframe.height = ""
si vous allez le réaffecter dans la toute prochaine instruction. Cela entraîne en fait une surcharge lorsque vous traitez avec un élément DOM.Modifier: si le contenu du cadre change constamment, appelez:
depuis l'iframe après la mise à jour. Fonctionne pour la même origine.
Ou pour détecter automatiquement:
la source
function resizeIframe(iframe) { var size=iframe.contentWindow.document.body.scrollHeight; var size_new=size+20; iframe.height = size_new + "px"; }
J'ai trouvé que la réponse acceptée ne suffisait pas, car X-FRAME-OPTIONS: Allow-From n'est pas pris en charge dans Safari ou Chrome . Je suis allé avec une approche différente à la place, trouvée dans une présentation donnée par Ben Vinegar de Disqus. L'idée est d'ajouter un écouteur d'événement à la fenêtre parent, puis à l'intérieur de l'iframe, utilisez window.postMessage pour envoyer un événement au parent lui disant de faire quelque chose (redimensionner l'iframe).
Donc, dans le document parent, ajoutez un écouteur d'événement:
Et à l'intérieur de l'iframe, écrivez une fonction pour publier le message:
Enfin, à l'intérieur de l'iframe, ajoutez un onLoad à la balise body pour déclencher la fonction de redimensionnement:
la source
setInterval(resize, 1000);
Ajoutez ceci à l'iframe, cela a fonctionné pour moi:
Et si vous utilisez jQuery essayez ce code:
la source
Il existe quatre propriétés différentes que vous pouvez consulter pour obtenir la hauteur du contenu dans un iFrame.
Malheureusement, ils peuvent tous donner des réponses différentes et celles-ci ne sont pas cohérentes entre les navigateurs. Si vous définissez la marge corporelle sur 0, le
document.body.offsetHeight
donne la meilleure réponse. Pour obtenir la valeur correcte, essayez cette fonction; qui provient de la bibliothèque iframe-resizer qui veille également à conserver la taille correcte de l'iFrame lorsque le contenu change ou que le navigateur est redimensionné.la source
Les autres réponses ne fonctionnaient pas pour moi, j'ai donc fait quelques changements. J'espère que cela vous aidera
la source
Plutôt que d'utiliser javscript / jquery, le moyen le plus simple que j'ai trouvé est:
Ici 1vh = 1% de la hauteur de la fenêtre du navigateur. La valeur théorique de la hauteur à régler est donc 100vh mais pratiquement 98vh a fait la magie.
la source
Juste au cas où cela aiderait quelqu'un. J'arrachais mes cheveux en essayant de faire fonctionner cela, puis j'ai remarqué que l'iframe avait une entrée de classe avec une hauteur: 100%. Lorsque j'ai supprimé cela, tout a fonctionné comme prévu. Veuillez donc vérifier les conflits CSS.
la source
vous pouvez également ajouter un requestAnimationFrame répétitif à votre resizeIframe (par exemple à partir de la réponse de @ BlueFish) qui sera toujours appelé avant que le navigateur ne peint la mise en page et vous pouvez mettre à jour la hauteur de l'iframe lorsque son contenu a changé de hauteur. par exemple, formulaires de saisie, contenu chargé paresseux, etc.
votre rappel devrait être assez rapide pour n'avoir aucun impact important sur vos performances globales
la source
Uncaught TypeError: Cannot read property 'scrollHeight' of null
depuisbody
estnull
, mais il travaille habituellement.Vous pouvez vous référer à la question connexe ici - Comment faire la largeur et la hauteur de iframe même que sa div parent?
Pour définir la hauteur dynamique -
Et les codes - https://gist.github.com/mohandere/a2e67971858ee2c3999d62e3843889a8
la source
J'utilise jQuery et le code ci-dessous fonctionne pour moi,
la source
J'ai trouvé que la réponse de Troy ne fonctionnait pas. C'est le même code retravaillé pour ajax:
la source
Pour ajouter au morceau de fenêtre qui semble se couper en bas, surtout lorsque vous n'avez pas de défilement, j'ai utilisé:
la source
Celui-ci est utile lorsque vous avez besoin d'une solution sans jquery. Dans ce cas, vous devriez essayer d'ajouter un conteneur et de lui définir un remplissage en pourcentages
Exemple de code HTML:
Exemple de code CSS:
la source
La solution simple consiste à mesurer la largeur et la hauteur de la zone de contenu, puis à utiliser ces mesures pour calculer le pourcentage de remplissage inférieur.
Dans ce cas, les mesures sont 1680 x 720 px, donc le rembourrage en bas est 720/1680 = 0,43 * 100, ce qui revient à 43%.
la source
Une réponse légèrement améliorée à BlueFish ...
Cela prend en compte la hauteur de l'écran Windows (navigateur, téléphone), ce qui est bon pour la conception réactive et les iframes qui ont une hauteur énorme. Le rembourrage représente le rembourrage que vous souhaitez au-dessus et en dessous de l'iframe dans le cas où il passe par tout l'écran.
la source
la source
Exemple d'utilisation de PHP htmlspecialchars () + vérifier si la hauteur existe et est> 0:
la source
il suffit de faire la position du conteneur iframe: absolu et iframe changera automatiquement sa hauteur en fonction de son contenu
la source
et / ou
Voir la question Débordement de pile Comment obtenir la hauteur d'un élément de corps .
Essayez ceci pour trouver la hauteur du corps dans jQuery:
Il n'a pas de valeur si Firebug . C'est peut-être le problème.
la source