前端实现两个网站页面跨域通信

问题描述:
A、B两个网站要实现跨域通信,可通过postMessage来实现。

A网站地址:A_HOST
B网站地址:B_HOST

  1. A系统页面发送数据给B系统页面:调用B页面window对象的postMessage方法
//在A系统页面添加以下代码
let bIframeWin = null
 layer.open({
            type: 2,
            title:"B系统页面",
            area: ['96%', '96%'],
            content:B_HOST+"/pageB.html",
            success:function (layero, index) {
            //获取B页面window,用于后面向B页面传递信息
                bIframeWin = window[layero.find('iframe')[0]['name']];
            }
        });
//或通过window.open打开
//bIframeWin = window.open(B_HOST+"/pageB.html")
window.addEventListener('message', function(e){
    let act = e.data.act
    if (act == 'beReady') {
    //接收到B页面传来准备好了的消息,确保B页面已加载完再给它传递数据
       let data = {
            act: 'setInfo',
            params:params //一些你要传的参数
        };
        bIframeWin.postMessage(data, B_HOST); //发送数据给B页面(来自另一个跨域系统)
    }
}, false);
  1. B系统页面监听消息:判断是不是指定的地址,是则接收信息,并调用A系统页面window.parent.postMessage回复父页面
//向打开B页面的opener发送消息,告诉它可以开始传递数据了
 window.opener && window.opener.postMessage({
            act: 'beReady'
        },A_HOST)
 window.addEventListener("message", function(event){ 
        if (event.origin !== A_HOST) 
        return; 
        if(event.data.act == "setInfo"){
            let params = event.data.params
            sessionStorage.setItem("token",JSON.stringify(params.token))
            //获取A系统页面的window->window.parent
             window.parent.postMessage({
                act: 'response',
                msg: {
                    answer: '我接收到啦!'
                }
            }, A_HOST);//'*' 不限制域
        }
}, false); 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值