最近遇到一个需求,需要将两个不同域名的h5网站进行数据共享,于是在跳转页面的时候,需要传递token完成登录。
A页面(http://127.0.0.1:8080/search):
const Cookie = require("js-cookie")
async created () {
window.addEventListener('message', (e) => {
if(e.origin != "http://127.0.0.1:8081")
return
if (e.data) {
clearInterval(this.messageInterval)
}
}, false)
},
destroyed () {
window.removeEventListener('message', this.addListener, false)
},
methods: {
searchClick () {
let cookie = Cookie.get('auth')
if (cookie) {
let auth = JSON.parse(cookie)
let activityWindow = window.open('http://127.0.0.1:8081/h5-home/activity')
this.messageInterval = setInterval(() => {
activityWindow.postMessage(auth.token, 'http://127.0.0.1:8081')
}, 1000)
}
}
}
注意:使用postMessage的时候一定要延时(我这里使用setInterval是为了保证数据接收成功),不然会接收不到数据。
使用window.open时不能带_self参数,不然会关掉A页面,无法进行数据传递。
B页面(http://127.0.0.1:8081/h5-home/activity):
async created () {
window.addEventListener('message', this.addListener, false)
},
destroyed(){
window.removeEventListener('message', this.addListener, false)
},
methods: {
addListener (e) {
if (e.origin != "http://127.0.0.1:8080") {
return
}
if (e.data) {
e.source.postMessage('received',e.origin);
}
console.log(e.data) //打印出传输过来的消息
}
}