login-status-iframe.html是keycloak为我们提供的一种检测用户登录状态的页面,它要求用户对接的系统通过iframe进行嵌入,然后通过window.addEventListener去订阅子页面的信息。
提示: 所有 HTML DOM 事件,可以查看我们完整的https://www.runoob.com/jsref/dom-obj-event.html。
addEventListener说明
- element.addEventListener(event, function, useCapture)
- event(*必须):字符串,指定事件名,注意: 不要使用 “on” 前缀。 例如,使用 “click” ,而不是使用 “onclick”。
- function(*必须):指定要事件触发时执行的函数。
- useCapture(*可选):布尔值,指定事件是否在捕获或冒泡阶段执行。
- true – 事件句柄在捕获阶段执行
- false – 默认,事件句柄在冒
跨域传值的测试
- 主页面:http://localhost:9090
- iframe页面:http://localhost:9090
主页面
// 父页面向iframe页面发消息 ,子页面接到后,再向父页面发送消息 var iframe = document.getElementById('you'); iframe.onload = function () { // 向子页面发消息 iframe.contentWindow.postMessage('Your message', 'http://localhost:7070'); // 订阅从子页面发过来的消息 window.addEventListener('message', function (event) { alert("主的" + event.origin); if (event.origin !== 'http://localhost:7070') {//这里的origin必须是子页面的域名,否则不会执行,因为这消息是子页面发过来的 return; } console.log(event.data); }); }
子页面
window.addEventListener('message', function (event) { alert(event.origin); if (event.origin !== 'http://localhost:9090') { //http://localhost:9090是主页面的地址,说明消息是从主页面发过来的 return; } // 处理从父页面发送过来的消息 alert('Received message: ' + event.data); // 向主页面再发消息 event.source.postMessage('Hello from iframe!', event.origin); }, false);
最后,你会从收到子页面的alert
再收到主页面的alert
作者:仓储大叔,张占岭,
荣誉:微软MVP
QQ:853066980
支付宝扫一扫,为大叔打赏!