html中iframe父子兄弟同域跨域通讯方式

html中iframe同域跨域通讯方式

html中iframe父子兄弟同域跨域通讯方式

在项目开发中我们经常使用iframe,那么iframe之间如何通讯,比如父子,兄弟inframe之间如何通讯,主要分同域与跨域二中场景

一、同域

在同域的情况下,子iframe页面可以很方便地直接调用父页面定义的js方法:
window.parent.fn(); 或者 window.top.fn();
window.self: 当前窗口自身的引用
window.parent: 上一级父窗口的引用
window.top: 最顶层窗口的引用
当页面中不存在 iframe 嵌套时,则 window.self, window.parent, window.top 三者均是当前窗口自身的引用。

比如,parent.html 和 child.html 均在 a.com 的同一域名下,

<iframe id="bfwframe" name="bfwframe" src="./childiframe.html"></iframe>
<!-- 或者 -->
<iframe id="bfwframe" name="bfwframe" src="a.com/childiframe.html"></iframe>
<script>
function sayHi () {
 alert('hi bfw!');
}
</script>

那么childiframe.html中调用parent中的js方法

window.parent.sayHi(); //或者 top.sayHi();

当 <iframe> 的链接与父页面不同域时,则子页面的 iframe 不能调用父页面定义的方法,会报错;

二、跨域

那么跨域的情况下可以使用postmessage

Window.postMessage 是 HTML5 提供的一个跨域解决方案。

window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为http...

点击查看剩余70%

{{collectdata}}

网友评论0