Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我会得到;“拒绝许可”;在Microsoft Edge中访问父iframe时_Javascript_Iframe_Parent_Microsoft Edge - Fatal编程技术网

Javascript 为什么我会得到;“拒绝许可”;在Microsoft Edge中访问父iframe时

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

我在重新加载另一个iframe后调用特定iframe的函数时遇到一些问题。它适用于所有主流浏览器,但在MicrosoftEdge上表现有点怪异。您将需要以下星座来获得错误。所有文件都位于同一服务器上的同一目录中。我没有设置任何内容安全策略

如果加载Frame1.html,一切都会很好,您将收到“警报”消息

但是,如果您单击frame4.html上的“click me”a标记,frame2.html将被重新加载,您将收到“permission denied”错误,因为父对象(
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);
}