2011-11-22 25 views
6

Tengo iframe (dominio cruzado) con src de facebook, twitter o etc. Necesito obtener la altura del iframe, pero tengo un problema: "Permiso denegado para acceder a la propiedad 'documento'". Por favor ayúdame a resolver esto. ¡Muchas gracias!Cómo obtener la altura del iframe dominio cruzado

Respuesta

6

Problemas con la pareja. En primer lugar, es probable que la altura del iframe no sea la que desea. Me refiero a que está establecido explícitamente en el código HTML de la página que controlas y es fácilmente accesible y modificable a través de cualquier medio de Javascript. Lo que parece que buscas es el alto de la página dentro de el iframe. Si ese es el caso, la respuesta simple es que no se puede, al menos no con servicios externos como Facebook/Twitter.

Por razones de seguridad, uno puede pasar fácilmente mensajes de hijo a padre, pero no de padre a hijo, a menos que se haya incorporado una vía de comunicación en su javascript en ambos documentos. Hay un protocolo postMessage para manejar esto en los navegadores modernos. https://developer.mozilla.org/en/DOM/window.postMessage. Pero es totalmente inútil en este caso, a menos que el documento con el que se está comunicando esté configurado para manejar un postMessage entrante, que a mi conocimiento, con frecuencia, Twitter/Facebook no lo es.

Si un documento principal puede comunicarse libremente con los niños de diferentes dominios, entonces cualquier javascript podría ejecutar con eficacia cualquier serie de comandos en cualquier sitio que haya iniciado sesión como. Las implicaciones de seguridad de eso son aterradoras y afortunadamente no es posible.

1

No hay opciones en javascript para encontrar el alto de una altura de iframe de dominios cruzados, pero puede hacer algo como esto con la ayuda de alguna programación del lado del servidor. Usé PHP para este ejemplo

<?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> 
Cuestiones relacionadas