Ich habe einige Probleme beim Aufruf einer Funktion eines bestimmten iframe nach dem erneuten Laden eines anderen iframe. Es funktioniert auf allen gängigen Browsern, verhält sich aber auf Microsoft Edge etwas seltsam. Sie benötigen die folgende Konstellation, um den Fehler zu erhalten. Alle Dateien befinden sich im selben Verzeichnis auf demselben Server. Ich habe keine Inhaltssicherheitsrichtlinie festgelegt.Warum bekomme ich "Berechtigung verweigert" in Microsoft Edge beim Zugriff auf Eltern iframe
Wenn Sie die Frame1.html laden, wird alles in Ordnung sein und Sie erhalten die "Alarm" -Meldung.
Wenn Sie jedoch auf das a-Tag "Click me" auf frame4.html klicken, wird frame2.html neu geladen und Sie erhalten den Fehler "permission denied", weil das übergeordnete Objekt (var tmpParent = parent;
) nicht zugänglich ist. Wenn Sie erneut auf das a-Tag klicken, funktioniert es ohne Fehler.
Ich denke, es ist ein Edge-Bug, weil alle anderen Browser damit umgehen können und es nur beim ersten Klick passiert.
Der Fehler tritt auch auf, wenn Sie die oberste Instanz des übergeordneten Elements verwenden.
Der Code von topFrame.js wird verwendet, um den obersten Frame meiner Site zu finden. Ich kann nicht einfach top verwenden, da es möglich sein sollte, meine Website einzubetten.
Hat jemand eine Ahnung?
Vielen Dank!
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);
}
Vielleicht ist das https://davidwalsh.name/iframe-permission-denied – mplungjan
X-Frame-Optionen zu SAMEORIGIN setzen nicht beheben :-(aber thx. – gollum1007
@ gollum1007 haben Sie es geschafft, dies zu lösen? Alle anderen Updates "Bitte teilen. Wir haben auch das gleiche. –