J'ai essayé quelques solutions mais je n'ai pas réussi. Je me demande s'il existe une solution de préférence avec un tutoriel facile à suivre.
110
J'ai essayé quelques solutions mais je n'ai pas réussi. Je me demande s'il existe une solution de préférence avec un tutoriel facile à suivre.
Réponses:
Vous avez trois alternatives:
1. Utilisez iFrame-resizer
Il s'agit d'une bibliothèque simple pour garder les iFrames dimensionnés en fonction de leur contenu. Il utilise les API PostMessage et MutationObserver, avec des solutions de secours pour IE8-10. Il a également des options pour que la page de contenu demande que l'iFrame contenant soit une certaine taille et peut également fermer l'iFrame lorsque vous en avez terminé.
https://github.com/davidjbradshaw/iframe-resizer
2. Utilisez Easy XDM (combo PostMessage + Flash)
Easy XDM utilise une collection d'astuces pour activer la communication interdomaine entre différentes fenêtres dans un certain nombre de navigateurs, et il existe des exemples d'utilisation pour le redimensionnement iframe:
http://easyxdm.net/wp/2010/03/17/resize-iframe-based-on-content/
http://kinsey.no/blog/index.php/2010/02/19/resizing-iframes-using-easyxdm/
Easy XDM fonctionne en utilisant PostMessage sur les navigateurs modernes et une solution basée sur Flash comme solution de secours pour les navigateurs plus anciens.
Voir aussi ce fil sur Stackoverflow (il y en a aussi d'autres, c'est une question fréquemment posée). En outre, Facebook semble utiliser une approche similaire .
3. Communiquez via un serveur
Une autre option serait d'envoyer la hauteur de l'iframe à votre serveur, puis d'interroger ce serveur à partir de la page Web parente avec JSONP (ou d'utiliser un long sondage si possible).
la source
J'ai eu la solution pour définir la hauteur de l'iframe de manière dynamique en fonction de son contenu. Cela fonctionne pour le contenu interdomaine. Il y a quelques étapes à suivre pour y parvenir.
Supposons que vous ayez ajouté un iframe dans la page Web "abc.com/page"
<div> <iframe id="IframeId" src="http://xyz.pqr/contactpage" style="width:100%;" onload="setIframeHeight(this)"></iframe> </div>
Ensuite, vous devez lier l'événement Windows "message" sous la page Web "abc.com/page"
Lors du chargement d'iframe, vous devez envoyer un message au contenu de la fenêtre iframe avec le message "FrameHeight":
la source
Ce que j'ai fait, c'est comparer l'iframe scrollWidth jusqu'à ce qu'il change de taille pendant que je règle incrémentalement la hauteur IFrame. Et cela a bien fonctionné pour moi. Vous pouvez ajuster l'incrément à ce que vous souhaitez.
la source
J'ai un script qui tombe dans l'iframe avec son contenu. Il s'assure également que iFrameResizer existe (il l'injecte en tant que script), puis effectue le redimensionnement.
Je vais vous présenter un exemple simplifié ci-dessous.
Ensuite, le contenu iframe peut être injecté n'importe où dans une autre page / site en utilisant le script comme suit:
Le contenu iframe sera injecté ci-dessous où que vous placiez la balise de script.
J'espère que cela est utile à quelqu'un. 👍
la source
<script ... data-src="http://google.com">
et rempli l'iframe src avec.[email protected]
Voici ma solution simple sur cette page. http://lab.ohshiftlabs.com/iframesize/
Voici comment cela fonctionne;
Fondamentalement, si vous pouvez modifier la page sur un autre domaine, vous pouvez placer une autre page iframe qui appartient à votre serveur, ce qui économise de la hauteur aux cookies. Avec un intervalle de lecture des cookies lors de sa mise à jour, mettez à jour la hauteur de l'iframe. C'est tout.
Télécharger; http://lab.ohshiftlabs.com/iframesize/iframesizepost.zip
Edit: décembre 2019
La solution ci-dessus utilise essentiellement une autre iframe à l'intérieur d'un iframe 3ème iframe appartient au domaine de la page supérieure, que vous appelez cette page avec une chaîne de requête qui enregistre la valeur de la taille dans un cookie, la page externe vérifie cette requête avec un certain intervalle. Mais ce n'est pas une bonne solution, vous devez donc suivre celle-ci:
En haut de la page:
Ici, vous pouvez vérifier
m.origin
d'où il vient.Dans la page cadre:
Cependant, n'oubliez pas que ce n'est pas un moyen sûr. Pour le rendre sécurisé, mettez à jour la valeur * (targetOrigin) avec la valeur souhaitée. Veuillez suivre la documentation: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
la source
J'ai trouvé une autre solution côté serveur pour les développeurs Web en utilisant PHP pour obtenir la taille d'une iframe.
La première consiste à utiliser le script serveur PHP pour un appel externe via une fonction interne: (comme
file_get_contents
avec mais curl et dom).Vous devez afficher sous le div (
iframe_reserve
) le html généré par l'appel de fonction en utilisant un simpleecho curl_get_file_contents("location url iframe","activation proxy")
Après cela, une fonction d'événement body onload avec javascript prend la hauteur de la page iframe juste avec un simple contrôle du contenu div (
iframe_reserve
)J'ai donc utilisé
divHeight = document.getElementById("iframe_reserve").clientHeight;
pour obtenir la hauteur de la page externe que nous allons appeler après avoir masqué le conteneur div (iframe_reserve
). Après cela, nous chargeons l'iframe avec sa bonne hauteur c'est tout.la source
J'ai rencontré ce problème en travaillant sur quelque chose au travail (en utilisant React). Fondamentalement, nous avons du contenu html externe que nous sauvegardons dans notre table de documents dans la base de données, puis insérons sur la page dans certaines circonstances lorsque vous êtes dans l'ensemble de données Documents.
Ainsi, étant donné les
n
inlines, dont jusqu'àn
pouvait contenir du html externe, nous devions concevoir un système pour redimensionner automatiquement l'iframe de chaque inline une fois le contenu entièrement chargé dans chacun. Après avoir fait tourner mes roues pendant un moment, voici comment j'ai fini par le faire:message
écouteur d'événements dans l'index de notre application React qui recherche une clé spécifique que nous définirons à partir de l'iframe de l'expéditeur.<script>
balise qui attendra que l'iframewindow.onload
se déclenche. Une fois que cela se déclenche, nous utilisonspostMessage
pour envoyer un message à la fenêtre parente avec des informations sur l'identifiant iframe, la hauteur calculée, etc.id
de l'iframe que nous passons dans l'MessageEvent
objetiframe
, définissez simplement la hauteur à partir de la valeur transmise par l'iframepostMessage
.la source