简单通过iframe+postMessage+localstorage实现跨域通信存储

这个方式我们可以实现我们在工作上出现的单点登录的问题,或者跨域传递信息的解决方案

假设我们当前所在的地址为http://localhost:8080当我们点击跳转的时候我们需要将我们当前域上的登录token携带到我们即将要跳转的http://localhost:8081上,一下就是我们的解决方案:

下面的这个是http://localhost:8080里面的代码

<script>
//首先我们需要创建一个iframe标签
cosnt bIframe = document.createElement('iframe')
bIframe.src='http://localhost:8081' // src需要指向我们要传递数据的目标地址
bIframe.style = "display:none" // 使该标签儿不在界面上进行显示
document.body.append(bIframe)  // 将标签插入到页面上
// 这个load事件是必须要加的不加,信息无法传递
bIframe.onload =()=>{
    bIframe.contentWindow.postMessage(
          JSON.stringify({ key: '这是神门东西' }),
          "http://localhost:8081"
    )
}

window.open('http://localhost:8081','_blank')  //打开我们想要的页面
</script>

下面的这个是http://localhost:8081里面的代码

//在我们需要使用通信的数据的页面中使用message事件进行监听

window.addEventListener('message',(e)=>{
//此时我们在e中获取origin,就是传递数据的地址,通过对比e.origin是否是从我们想要的地址传递过来的
    if(e.origin === 'http://localhost:8080'){
        //e.data 可以拿到我们从http://localhost:8080里面的数据,然后我们就可以将他存到localStorage中
    localStorage.setItem('token',e.data)
    }
}

 通过以上的代码我们就可以在我们新打开页面中的localStorage中查看到我们需要的token

在vue中也可以使用以上的方法进行实现

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值