2011-11-22 9 views

risposta

6

Problemi di coppia. Innanzitutto, l'altezza di iframe probabilmente non è quello che desideri. Voglio dire che è impostato in modo esplicito nel codice HTML della pagina che controlli ed è facilmente accessibile e modificabile attraverso qualsiasi mezzo Javascript. Quello che ti sembra dopo è l'altezza della pagina all'interno dell'iframe. Se è così, la risposta più semplice è che non puoi, almeno non con servizi esterni come Facebook/Twitter.

Per motivi di sicurezza, si può facilmente passare i messaggi da bambino a genitore, ma non da genitore a figlio, a meno che un percorso di comunicazione è stato integrato nel tuo javascript in entrambi i documenti. C'è un protocollo postMessage per gestirlo nei browser moderni. https://developer.mozilla.org/en/DOM/window.postMessage. Ma, in questo caso, è completamente inutile a meno che il documento con cui stai comunicando sia configurato per gestire un messaggio in arrivo, che a mia conoscenza Twitter/Facebook spesso non lo è.

Se un documento genitore potrebbe liberamente comunicare con i bambini provenienti da diversi domini, quindi qualsiasi JavaScript si potrebbero effettivamente eseguire qualsiasi serie di comandi su qualsiasi sito che si è registrato nel come. Le implicazioni sulla sicurezza di questo sono spaventose e per fortuna non sono possibili.

1

Non vi sono opzioni in javascript per trovare l'altezza di un'altezza iframe per più domini, ma è possibile fare qualcosa di simile con l'aiuto di alcuni programmi di programmazione lato server. Ho usato PHP per questo esempio

<?php 
$output = file_get_contents('http://yourdomain.com'); 
?> 
<div id='iframediv'> 
    <?php echo $output; ?> 
</div> 

<iframe style='display:none' id='iframe' src="http://yourdomain.com" width="100%" marginwidth="0" height="100%" marginheight="0" align="top" scrolling="auto" frameborder="0" hspace="0" vspace="0"> </iframe> 

<script> 
if(window.attachEvent) { 
    window.attachEvent('onload', iframeResizer); 
} else { 
    if(window.onload) { 
     var curronload = window.onload; 
     var newonload = function(evt) { 
      curronload(evt); 
      iframeResizer(evt); 
     }; 
     window.onload = newonload; 
    } else { 
     window.onload = iframeResizer; 
    } 
} 
    function iframeResizer(){ 
     var result = document.getElementById("iframediv").offsetHeight; 

     document.getElementById("iframe").style.height = result; 
     document.getElementById("iframediv").style.display = 'none'; 
     document.getElementById("iframe").style.display = 'inline'; 
    } 
</script> 
Problemi correlati