记一次前端处理免登陆跳转

2020-12-11  本文已影响0人  studentliubo

需求场景:从A系统登录跳转到B系统,这个时候B系统不需要再重新登录。
实现方案:因为不需要后端处理,前端实现是否登录的判断,故选择使用h5的postMessage API,在A系统跳转时给B系统发送消息。
实现代码:

A系统

window.sender = window.open(url) // url:B系统的地址
const timer = setInterval(function () {
     window.sender.postMessage(str), url) // str:发送给B系统的参数
}, 200)

window.addEventListener('message', function (event) {
   if (event.data === 'success') {
     clearInterval(timer)
   }
}, false)

B系统

window.onmessage = function(e) {
  const isProduction = process.env.NODE_ENV === 'production'
  let flag = isProduction ? config.mainEntry.origin.includes(e.origin) : true
  // 本地调试
  if (e.origin.includes('localhost')) flag = true
  if (flag && e.data) {
    if (e.data.constructor !== String) return
    const data = JSON.parse(e.data)
    e.source.postMessage('success', e.origin)
    window.location.href = window.location.origin + window.location.pathname
    window.open(window.location.href, '_self')
  }
}

注意事项:

上一篇下一篇

猜你喜欢

热点阅读