wake-up-neo.net

Fehler: Berechtigung zum Zugriff auf Eigenschaft "Dokument" verweigert

Ich erhalte ständig den Fehler "Error: Permission denied to access property 'document'", während ich bereits in meinem X-FRAME options definiert habe, um die andere Domäne zuzulassen.

 <?php
        header('X-Frame-Options: ALLOW-FROM http://mydomain.com'); 
    ?>

Unten ist die Kopfzeile der Iframe-Anfrage. Dies zeigt deutlich, dass ich definiert habe, dass die Domäne auf den Iframe zugreifen kann, aber nicht funktioniert. Alles, was ich möchte, ist, den iframe mit Javascript zu verkleinern.

enter image description here

Hier ist mein Javascript-Code, um die Höhe des Iframes zu ändern.

<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>

Wie kann ich das machen? Bitte vorschlagen.

5
Coder anonymous

Ich hatte dieses Problem vor kurzem selbst. Zum Schluss habe ich es mit der postMessage-Methode gelöst.

  1. In dem im iFrame enthaltenen Dokument überprüfe ich, ob es tatsächlich von einem iFrame ausgeführt wird.

    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);
             }
        }
    
  2. Wenn das Dokument in einem iFrame ausgeführt wird, rufen Sie eine Funktion auf, die wir postSize nennen.

    function postSize(height){
         var target = parent.postMessage ? parent : (parent.document.postMessage ? parent.document : undefined);
    
        if(typeof target != "undefined" && document.body.scrollHeight){
            target.postMessage(height, "*");
            }
        }
    
  3. Fügen Sie dem Dokument, das Ihren iFrame enthält, den folgenden Code hinzu

    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);
    

Leider kann ich mich nicht an die genauen Quellen für all dies erinnern, da ich auf Stackoverflow viele verschiedene Lösungen, aber auch verschiedene Websites, angeschaut habe. Aber diese Lösung funktioniert gut für mich.

Prost

15
entiendoNull

Nicht sicher, warum die anderen Lösungen eine iFrame-ID verwenden. Es sollte auch funktionieren ohne:

Seite innerhalb des iFrame, die eine Nachricht nach außen sendet:

<script>
     parent.postMessage('your message', '*');
</script>

Übergeordneter Rahmen:

window.addEventListener("message", receiveMessage, false);

function receiveMessage(event)
{
  console.log('Message: ',  event.data);
}
0
ownking