Je reçois continuellement l'erreur "Error: Permission denied to access property 'document'"
alors que j'ai déjà défini dans mon X-FRAME options
d'autoriser l'autre domaine, comme celui-ci.
<?php
header('X-Frame-Options: ALLOW-FROM http://mydomain.com');
?>
Ci-dessous, l'en-tête de la requête iframe, indique clairement que j'ai défini pour permettre au domaine d'accéder à l'iframe mais ne fonctionne pas. Tout ce que je veux, c'est redimensionner l'iframe en javascript.
Voici mon code javascript pour redimensionner la hauteur d'iframe.
<iframe src="http://mydomain.com/xxx/yyy" id="idIframe" onload="iframeLoaded();" allowtransparency="true" frameborder="0" width="100%" scrolling="no"></iframe>
<script type="text/javascript">
function iframeLoaded() {
var iFrameID = document.getElementById('idIframe');
if(iFrameID) {
iFrameID.height = "";
if(iFrameID.contentWindow.document.body.scrollHeight < 500) {
iFrameID.height = "500px";
} else {
iFrameID.height = iFrameID.contentWindow.document.body.scrollHeight + "px";
}
}
}
</script>
Comment puis-je faire ceci? Veuillez suggérer.
J'ai eu récemment ce problème moi-même… .. Enfin, je l'ai résolu avec la méthode postMessage.
Dans le document inclus dans l'iFrame, je vérifie s'il fonctionne réellement à partir d'un iFrame.
function inIframe(){
if(top != self){
var contentHeight = $('#myIframeContent').height(); //Just this part I did with jQuery as I was sure that the document uses it
postSize(contentHeight);
}
}
Si le document est exécuté dans un iFrame, appelez une fonction que nous appellerons postSize.
function postSize(height){
var target = parent.postMessage ? parent : (parent.document.postMessage ? parent.document : undefined);
if(typeof target != "undefined" && document.body.scrollHeight){
target.postMessage(height, "*");
}
}
Ajoutez le code suivant au document qui inclut votre iFrame
function receiveSize(e){
if(e.Origin === "http://www.mywebsite.net"){
var newHeight = e.data + 35;
document.getElementById("myIframeID").style.height = newHeight + "px";
}
}
window.addEventListener("message", receiveSize, false);
Malheureusement, je ne me souviens pas des sources exactes de tout cela, car je visais beaucoup de solutions différentes ici sur Stackoverflow, mais aussi sur différents sites Web. Mais cette solution fonctionne bien pour moi.
À votre santé
Vous ne savez pas pourquoi les autres solutions utilisent un identifiant iFrame. Cela devrait aussi fonctionner sans:
Page dans l'iFrame qui envoie un message à l'extérieur:
<script>
parent.postMessage('your message', '*');
</script>
Cadre parent:
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
console.log('Message: ', event.data);
}