2010-06-25 5 views
0

Avant de commencer à commenter le «coup de foudre», laissez-moi clarifier ce que j'essaie de faire pour voir si quelqu'un peut m'aider.iFrame Automatic Sizing

J'ai une fenêtre parent avec un iFrame dedans. Le contenu de l'iFrame est chargé à partir d'un domaine distinct où je pense que mes problèmes commencent, bien que cela doive être de cette façon. Lorsque la page se charge à l'origine, les éléments suivants sont exécutés:

<script language="javascript" type="text/javascript"> 
    var reportFrame = document.getElementById('report'); 

    function resizeIframe() { 
     var height = document.documentElement.clientHeight; 

     height -= reportFrame.offsetTop; 

     // not sure how to get this dynamically 
     height -= 20; /* whatever you set your body bottom margin/padding to be */ 

     reportFrame.style.height = height + "px"; 

    } 

    reportFrame.onload = resizeIframe; 
    window.onresize = resizeIframe; 

</script> 

Cela fonctionne très bien. L'iFrame n'a pas de barres de défilement et est parfait pour ce que je veux. Le problème que je rencontre est l'iFrame a un bouton qui provoque un post-retour sur le cadre. J'ai besoin que ce script s'exécute lorsque l'iFrame se recharge pour empêcher l'affichage des barres de défilement. En raison de la page enfant étant sur un domaine séparé, je ne suis pas en mesure d'appeler une fonction de celui-ci au parent (à peu près sûr que c'est là que XSS entre en jeu) donc je dois trouver un autre moyen pour le parent doit exécuter ce script car l'iFrame se recharge.

Des suggestions?

Répondre

2

Vous pouvez ajouter une minuterie qui vérifie et redimensionne à intervalles réguliers:

setInterval("resizeIframe()", 1000); //check every second 

[Modifier - liens pour les scripts Redimensionner]

Découvrez http://geekswithblogs.net/rashid/archive/2007/01/13/103518.aspx et Resizing an iframe based on content pour les scripts sur le redimensionnement d'une iframe.

+0

Je pensais à ce sujet, mais je n'étais pas sûr de l'impact sur les performances. Je vais essayer! Merci! – RubyHaus

+0

Je l'ai essayé et pas de joie - je pense que cela a à voir avec la fenêtre elle-même ne change pas de taille puisqu'elle se décolle du clientHauteur de la fenêtre. D'autres suggestions? – RubyHaus

+0

Ajout de liens dans ma réponse. Et une minuterie devrait fonctionner très bien. Peut-être avec 500ms même. Pour l'optimiser, vous pouvez démarrer la minuterie à chaque fois que vous obtenez un onmouseleave sur le cadre parent, et l'arrêter une fois que vous obtenez surmouseenter. Mais pas sûr si vous avez vraiment besoin de performance sage. Ce pourrait être une optimisation prématurée. –