在重新加载另一个iframe后调用特定iframe的函数时遇到一些问题。它适用于所有主流浏览器,但在Microsoft Edge上表现得有些奇怪。您将需要以下星座来获取错误。所有文件都在同一服务器上的同一目录中。我没有设置任何内容安全策略。
如果您加载Frame1.html,一切都会好的,您将收到“警告”消息。
但是如果你单击frame4.html上的“Click me”a-tag,将重新加载frame2.html,你将得到“权限被拒绝”错误,因为父对象(var tmpParent = parent;
)是无法访问。如果再次单击a-tag,它将无任何错误地工作。
我认为这是一个Edge bug,因为所有其他浏览器都可以处理它,它只会在第一次点击时出现。
如果您使用父母的顶级内容,也会发生错误。
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>
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);
}
答案 0 :(得分:0)
嗯,我知道我把我的脖子放在线上试图猜测IE试图告诉你什么,但我会认为使用这种类型的通信是违背iframes的目的。
如果您希望在子帧与parnet帧之间进行通信,我建议使用postMessages。我认为(我确实认为)你的脚本被XSS阻止 - 跨站点脚本。因此,如果您希望在父框架和子框架之间传递一些信息,或者反过来,我建议您查看postMessges。