gol*_*007 9 javascript iframe parent microsoft-edge
重新加载另一个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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
Frame3.html
<!DOCTYPE html>
<html>
<head>
<title>Frame 3</title>
</head>
<body>
<iframe name="subsubFrame" src="frame4.html" frameborder="0"></iframe>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Frame4.html
<!DOCTYPE html>
<html>
<head>
<title>Frame 4</title>
</head>
<body>
<a href="frame2.html" target="mainFrame">Click me</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
topFrame.js
try {
var tmpParent = parent;
var topFrame = tmpParent.topFrame;
while (topFrame === undefined) {
tmpParent = tmpParent.parent;
topFrame = tmpParent.topFrame;
}
} catch (e) {
alert(e);
}
Run Code Online (Sandbox Code Playgroud)
小智 1
好吧,我知道我在这里冒着风险试图猜测 IE 想要告诉你什么,但我认为使用这种类型的通信违背了 iframe 的意图。
如果您希望在子框架与 parnet 框架之间进行通信,我建议使用 postMessages 代替。我认为(我确实说过认为)您的脚本被 XSS - 跨站点脚本阻止。因此,如果您希望在父框架和子框架之间或以相反的方式传达一些信息,我建议您看看postMessges。
| 归档时间: |
|
| 查看次数: |
3609 次 |
| 最近记录: |