比如我有一个子系统A,页面打开,点击登录到登录系统B,B完成登录通过iframe.postmessage,给自己嵌入的A的iframe发消息,iframeA接收消息,保存登录token到localStorage,但是之前打开的页面A的localStorage依然没有token值啊。
// 获取 token
var token = result.data.token;
// 动态创建一个不可见的iframe,在iframe中加载一个跨域HTML
var iframe = document.createElement("iframe");
iframe.src = "http://app1.com/localstorage.html";
document.body.append(iframe);
// 使用postMessage()方法将token传递给iframe
setTimeout(function () {
iframe.contentWindow.postMessage(token, "http://app1.com");
}, 4000);
setTimeout(function () {
iframe.remove();
}, 6000);
// 在这个iframe所加载的HTML中绑定一个事件监听器,当事件被触发时,把接收到的token数据写入localStorage
window.addEventListener('message', function (event) {
localStorage.setItem('token', event.data)
}, false);
localStorage 不能跨域写. 推荐监听iframe给父容器发送的message事件,由父容器自己写.