Javascript 为什么我会得到;“拒绝许可”;在Microsoft Edge中访问父iframe时
我在重新加载另一个iframe后调用特定iframe的函数时遇到一些问题。它适用于所有主流浏览器,但在MicrosoftEdge上表现有点怪异。您将需要以下星座来获得错误。所有文件都位于同一服务器上的同一目录中。我没有设置任何内容安全策略 如果加载Frame1.html,一切都会很好,您将收到“警报”消息 但是,如果您单击frame4.html上的“click me”a标记,frame2.html将被重新加载,您将收到“permission denied”错误,因为父对象(Javascript 为什么我会得到;“拒绝许可”;在Microsoft Edge中访问父iframe时,javascript,iframe,parent,microsoft-edge,Javascript,Iframe,Parent,Microsoft Edge,我在重新加载另一个iframe后调用特定iframe的函数时遇到一些问题。它适用于所有主流浏览器,但在MicrosoftEdge上表现有点怪异。您将需要以下星座来获得错误。所有文件都位于同一服务器上的同一目录中。我没有设置任何内容安全策略 如果加载Frame1.html,一切都会很好,您将收到“警报”消息 但是,如果您单击frame4.html上的“click me”a标记,frame2.html将被重新加载,您将收到“permission denied”错误,因为父对象(var tmpPare
var tmpParent=parent;
)不可访问。如果再次单击a标记,它将正常工作,不会出现任何错误
我认为这是一个边缘缺陷,因为所有其他浏览器都可以处理它,而且它只在第一次单击时出现
如果使用父项的顶部替代,也会发生此错误
topFrame.js的代码用于查找我的站点最顶层的框架。
我不能简单地使用top,因为它应该可以嵌入我的站点
有人有线索吗
非常感谢
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>
<!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>
<!DOCTYPE html>
<html>
<head>
<title>Frame 3</title>
</head>
<body>
<iframe name="subsubFrame" src="frame4.html" frameborder="0"></iframe>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Frame 4</title>
</head>
<body>
<a href="frame2.html" target="mainFrame">Click me</a>
</body>
</html>
我知道我在这里冒着很大的风险想猜IE想告诉你什么,但我认为使用这种类型的通信违背了iFrame的意图
如果您希望在子帧到parnet帧之间进行通信,我建议改用postmessage。我认为(我确实说过)您的脚本被XSS-跨站点脚本阻止了。因此,如果您希望在父帧和子帧之间或以其他方式传递一些信息,我建议您查看。也许将x-frame-options设置为SAMEORIGIN无法解决此问题:-(但是thx。@gollum1007你解决了这个问题吗?还有其他更新吗?请分享。我们也经历了同样的情况。我也得到了这个。gollum1007或@Ali Lee-你们两个解决了这个问题吗?你有没有尝试过
parent.myAlert()
来代替?代码膨胀是怎么回事?
try {
var tmpParent = parent;
var topFrame = tmpParent.topFrame;
while (topFrame === undefined) {
tmpParent = tmpParent.parent;
topFrame = tmpParent.topFrame;
}
} catch (e) {
alert(e);
}