展示
代码
本页JS代码:
// 监听从右侧框架传来的信息
window.addEventListener('message', function(evt) {
if (evt.origin == 'https://www.zhangxinxu.com') {
if ( evt.ports.length > 0 ) {
// 将端口转移到其他文档
window.frames[0].postMessage('端口打开','https://www.zhangxinxu.com', evt.ports);
}
}
}, false);
左侧iframe JS代码:
var eleForm = document.querySelector("form"), port;
eleForm.onsubmit = function() {
var message = document.querySelector("input[type='text']").value;
if (port === undefined) {
alert('信息发送失败,目前没有可用端口!');
} else {
port.postMessage(message);
}
return false;
};
window.addEventListener('DOMContentLoaded', function(e) {
window.addEventListener('message', function(evt) {
// 扩大端口范围
if (evt.origin == 'https://www.zhangxinxu.com') {
port = evt.ports[0];
} else {
alert(evt.origin +'这厮我不认识哈!');
}
}, false);
window.parent.postMessage('发送页加载完毕', 'https://www.zhangxinxu.com');
} ,false);
右侧iframe JS代码:
var eleBox = document.querySelector("#message");
var messageHandle = function(e) {
eleBox.innerHTML = '接受到的信息是:' + e.data;
};
window.addEventListener('DOMContentLoaded', function() {
if (window.MessageChannel) {
// 创建一个新的 MessageChannel 对象
var mc = new MessageChannel();
// 给父级发送一个端口
window.parent.postMessage('显示页加载完毕','https://www.zhangxinxu.com',[mc.port1]);
// 显示发送的信息
mc.port2.addEventListener('message', messageHandle, false);
mc.port2.start();
} else {
eleBox.innerHTML = '搞咩乃赛,您的浏览器不支持通道通信。
';
}
}, false);