对于iframe子页面与父页面通信,需要注意同域或不同域等情况。
对于iframe子页面与父页面通信,需要注意同域或不同域等情况。
同域下的js通信
当子页面和父页面在同一个域名下时,js通信可以通过window.parent对象来进行。以下是一个简单的示例。
父页面代码:
<!DOCTYPE html>
<html>
<head>
<title>父页面</title>
</head>
<body>
<h1>我是父页面</h1>
<div id="content"></div>
<script>
window.onload = function() {
var iframe = document.createElement('iframe');
iframe.src = 'iframe.html';
document.body.appendChild(iframe);
window.addEventListener('message', function(e) {
console.log('父页面接收到:' + e.data);
document.getElementById('content').innerHTML = e.data;
});
}
</script>
</body>
</html>
子页面代码:
<!DOCTYPE html>
<html>
<head>
<title>子页面</title>
</head>
<body>
<h1>我是子页面</h1>
<button onclick="sendMsg()">发送消息到父页面</button>
<script>
function sendMsg() {
window.parent.postMessage('这是子页面发来的消息', '*');
}
</script>
</body>
</html>
子页面中通过window.parent.postMessage方法发送消息到父页面。父页面中通过window.addEventListener方法监听message事件,并在事件处理程序中接收子页面的消息进行处理,此处将子页面传来的消息插入到页面中的content的div元素中。
不同域下的js通信
当子页面和父页面的域名不同时,js通信需要通过跨域postMessage方式来实现。以下是一个简单的示例。
父页面代码:
<!DOCTYPE html>
<html>
<head>
<title>父页面</title>
</head>
<body>
<h1>我是父页面</h1>
<div id="content"></div>
<script>
window.onload = function() {
var iframe = document.createElement('iframe');
iframe.src = 'http://127.0.0.1:8888/iframe.html';
document.body.appendChild(iframe);
window.addEventListener('message', function(e) {
console.log('父页面接收到:' + e.data);
document.getElementById('content').innerHTML = e.data;
});
}
</script>
</body>
</html>
子页面代码:
<!DOCTYPE html>
<html>
<head>
<title>子页面</title>
</head>
<body>
<h1>我是子页面</h1>
<button onclick="sendMsg()">发送消息到父页面</button>
<script>
function sendMsg() {
window.parent.postMessage('这是子页面发来的消息', 'http://127.0.0.1:8888');
}
</script>
</body>
</html>
子页面中同样是通过window.parent.postMessage方法发送消息到父页面,只不过这里需要指定父页面的域名。父页面中同样在iframe中嵌入子页面,然后通过window.addEventListener方法监听message事件,在事件处理程序中接收子页面的消息进行处理。
需要注意的是,父页面中的iframe src属性需要指定完整的子页面地址,例如:http://127.0.0.1:8888/iframe.html;而子页面中的发送消息时指定的域名也需要指定完整,例如:http://127.0.0.1:8888。
以上是iframe子页面与父页面在同域或不同域下的js通信的完整攻略。
本文标题为:iframe子页面与父页面在同域或不同域下的js通信
- javascript实现仿银行密码输入框效果的代码 2023-12-01
- Vuex 2023-10-08
- Ajax客户端异步调用服务端的实现方法(js调用cs文件) 2023-02-15
- Vue项目开发之项目初始化 2023-10-08
- 低代码从0到1创建小程序项目详解流程 2022-08-30
- HTML5 2023-10-27
- html,css基础(2)~元素盒模型,浮动布局,弹性布局 2023-10-27
- CSS 弹性布局Flex详细讲解(Flex 属性详解、场景分析) 2024-01-03
- HTML怎么设置下划线?html文字加下划线方法 2022-09-21
- vue 跨域代理404 第一个有效,其他都无效 2023-10-08