Redimensionner automatiquement la hauteur de l'iframe lorsque la hauteur de l'iframe de la modification de contenu (même domaine)
Je suis du chargement d'une iframe à l'intérieur d'une page, la longueur du contenu de l'iframe sera modifiée de temps à autre. J'ai mis en œuvre la solution suivante. Toutefois, la hauteur est fixée comme dyniframesize seulement obtenir de l'appel lors de l'iframe.onload.
Il est possible d'avoir l'iframe pour être redimensionnée en conséquence, de temps en temps, à la hauteur de l'iframe changé?
<iframe src ="popup.html" frameborder="0" marginheight="0" marginwidth="0" frameborder="0" scrolling="auto" id="ifm" name="ifm" onload="javascript:dyniframesize('ifm');" width="100%"></iframe>
function dyniframesize(down) {
var pTar = null;
if (document.getElementById){
pTar = document.getElementById(down);
}
else{
eval('pTar = ' + down + ';');
}
if (pTar && !window.opera){
//begin resizing iframe
pTar.style.display="block"
if (pTar.contentDocument && pTar.contentDocument.body.offsetHeight){
//ns6 syntax
pTar.height = pTar.contentDocument.body.offsetHeight +20;
pTar.width = pTar.contentDocument.body.scrollWidth+20;
}
else if (pTar.Document && pTar.Document.body.scrollHeight){
//ie5+ syntax
pTar.height = pTar.Document.body.scrollHeight;
pTar.width = pTar.Document.body.scrollWidth;
}
}
}
</script>
OriginalL'auteur user2625363 | 2013-12-26
Vous devez vous connecter pour publier un commentaire.
À ma connaissance, il n'y a pas une façon très naturelle de le faire, mais il y a quelques options.
setInterval()
Vous pouvez utiliser
setInterval()
à repeatadly vérifier le contenu de l'iframe de la hauteur et de l'ajuster si nécessaire. C'est simple, mais inefficace.Des Écouteurs D'Événement
Tout changement de contenu dans le contenu de l'iframe (et donc de hauteur) est généralement déclenchée par un événement. Même si vous ajoutez du contenu à partir de l'extérieur de l'iframe, qui "ajouter" est probablement déclenchée par un clic sur un bouton, par exemple. Voici quelque chose qui pourrait fonctionner pour vous: démo en Direct ici (clic).
Mutation Observateur
Cette solution fonctionne dans tous les up-to-date navigateurs - http://caniuse.com/mutationobserver
Démonstration en direct ici (cliquez).
C'est vraiment simple et doit attraper les changements pertinents. Si pas, vous pouvez le combiner avec l'écouteur d'événement solution ci-dessus pour être sûr que les choses sont mis à jour!
Mention Honorable: débordement/underflow événements.
Lire à ce sujet ici (il y en A BEAUCOUP).
et voir mon démo ici (ne fonctionne pas sous IE 11!).
Ce était un cool solution, mais elle n'est plus de travail dans IE. Il pourrait être possible de le modifier, mais je préfère utiliser l'une des solutions ci-dessus, même si j'avais à revenir à 1 seconde
setInterval
pour les anciens navigateurs, juste parce que c'est beaucoup plus simple que cette solution.La dernière option semble viable une fois de plus.
OriginalL'auteur m59
J'ai écrit une petite Bibliothèque qui utilise mutationaObserver et eventListners, avec l'automne dos à setInterval pour IE8-10 et travaille pour des même domaine et de la croix de domaine. Il peut la taille de la hauteur et la largeur.
http://davidjbradshaw.github.io/iframe-resizer/
Seule qui a fonctionné pour moi, en raison de la complexité de la page. Merci pour le partage avec la Communauté. Excellent exemple. =) +1
OriginalL'auteur David Bradshaw
iFrame Vue
Vue Principale
OriginalL'auteur Owen
Vous pouvez utiliser des événements de signal entre le
iframe
et le parent.Dans le
iframe
:Puis, dans le parent:
OriginalL'auteur Stephen Thomas
En fait, vous devez le faire à partir d'une iframe en accédant à la fenêtre parent et l'évolution de l'iframe hauteur.
Car le document dans un iframe connaît généralement mieux si le corps a changé, c'est la taille (il est possible de le lier à quelque chose comme le corps.onload au lieu d'utiliser des intervalles de vérifier si quelque chose a changé dans l'iframe).
Si votre iframe est capable de modifier de manière dynamique, c'est la hauteur (comme l'insertion de certaines des données à partir de requêtes ajax), vous pouvez toujours "injecter" le code de la fenêtre.parent.document.getElementById ("myframe').style.hauteur = fenêtre.document.corps.offsetHeight (ou qch comme ça) immédiatement après l'insertion de données de l'ajax. Sinon, vous aurez besoin de ce code uniquement dans le corps.onload dans votre iframe.
Votre réponse n'est pas ce qui suggère "dynamique" de redimensionnement. Manuellement l'appel de la fonction de mise à jour après avoir fait un appel ajax est évident. Il en veut pour mettre à jour lui-même.
Eh bien, (OMI) ta solution me semble un peu "sale" à moi aussi bien que trop évident. J'ai juste suggéré la "bonne façon de le faire" (comme je le vois).
La première solution, j'ai noté est inefficace et je l'ai inclus pour l'intégralité. La deuxième solution est simple et propre. Le troisième est génial et super efficace, mais compliqué. Je vais l'ajouter dans un instant. Je ne vais pas downvote personnellement celui-ci, j'étais simplement en indiquant que votre réponse ne soit pas lié à la question..j'ai pensé que vous pourriez apprécier sachant que.
OriginalL'auteur haldagan