2015-12-03 23 views
8

Ho alcuni problemi nel chiamare una funzione di un iframe specifico dopo aver ricaricato un altro iframe. Funziona su tutti i principali browser, ma si comporta un po 'strano su Microsoft Edge. Avrai bisogno della seguente costellazione per ottenere l'errore. Tutti i file si trovano nella stessa directory sullo stesso server. Non ho impostato alcuna politica di sicurezza del contenuto.Perché ottengo il "permesso negato" in Microsoft Edge quando si accede a iframe padre

Se si carica il file Frame1.html, tutto andrà bene e verrà visualizzato il messaggio di "avviso".

Ma se si fa clic sul tag "Click me" sul frame4.html, il file frame.html verrà ricaricato e verrà visualizzato l'errore "permesso negato" perché l'oggetto padre (var tmpParent = parent;) non è accessibile. Se fai nuovamente clic sul tag "a-tag" funzionerà senza errori.

Penso che sia un bug Edge, perché tutti gli altri browser possono gestirlo e si verificano solo al primo clic.

L'errore si verifica anche se si utilizza la parte superiore del genitore.

Il codice di topFrame.js viene utilizzato per trovare il Frame più in alto del mio sito. Non posso semplicemente usare top perché dovrebbe essere possibile incorporare il mio sito.

Qualcuno ha un indizio?

Grazie mille!

frame1.html

<!DOCTYPE html> 
<html> 

<head> 
    <title>Frame 1</title> 
    <script type="text/javascript"> 
    var topFrame = this; 

    function myAlert() { 
     alert('alert'); 
    } 
    </script> 
</head> 

<body> 
    <iframe id="overallContentWrapper" name="mainFrame" src="frame2.html" frameborder="0"></iframe> 
</body> 

</html> 

Frame2.html

<!DOCTYPE html> 
<html> 

<head> 
    <title>Frame 2</title> 
    <script src="topFrame.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
    window.addEventListener("load", function load(event) { 
     window.removeEventListener("load", load, false); 

     try { 
     topFrame.myAlert(); 
     } catch (e) { 
     alert(e); 
     } 
    }, false); 
    </script> 
</head> 

<body> 
    <iframe name="subFrame" src="frame3.html" frameborder="0"></iframe> 
</body> 

</html> 

Frame3.html

<!DOCTYPE html> 
<html> 

<head> 
    <title>Frame 3</title> 
</head> 

<body> 
    <iframe name="subsubFrame" src="frame4.html" frameborder="0"></iframe> 
</body> 

</html> 

Frame4.html

<!DOCTYPE html> 
<html> 

<head> 
    <title>Frame 4</title> 
</head> 

<body> 
    <a href="frame2.html" target="mainFrame">Click me</a> 
</body> 

</html> 

topFrame.js

try { 
    var tmpParent = parent; 
    var topFrame = tmpParent.topFrame; 
    while (topFrame === undefined) { 
    tmpParent = tmpParent.parent; 
    topFrame = tmpParent.topFrame; 
    } 
} catch (e) { 
    alert(e); 
} 
+3

Forse questo https://davidwalsh.name/iframe-permission-denied~~V~~3rd – mplungjan

+1

Impostazione X-Frame-opzioni per SAMEORIGIN non risolvere il problema :-(ma thx. – gollum1007

+1

@ gollum1007 siete riusciti a risolvere questo? Eventuali altri aggiornamenti "Per favore condividi, anche noi stiamo vivendo lo stesso." –

risposta

0

So bene im mettendo il mio collo sulla linea qui cercando di indovinare che cosa IE sta cercando di dirvi, ma presumo che usare questo tipo di comunicazione va contro ciò che gli iframe intendono fare.

Se si desidera comunicare tra fotogrammi figlio su fotogrammi parnet, suggerire invece di utilizzare postMessages. Penso che (ho detto penso) il tuo script venga bloccato contro XSS - cross site scripting. Quindi se desideri comunicare alcune informazioni tra frame padre e frame figlio o viceversa suggerisco di dare un'occhiata a .