Ho iframe (dominio incrociato) con src da facebook, twitter o ecc. Ho bisogno di ottenere l'altezza di iframe ma ho il problema: "Autorizzazione negata per accedere alla proprietà 'documento'". Per favore aiutami a risolvere questo. Grazie molto!Come ottenere l'altezza di iframe nel dominio incrociato
risposta
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.
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>