postMessage

最近公司项目遇到一个问题:项目中使用的百度地图插件不支持https协议,所以想到的办法是当请求是Https协议的时候,弹出一个新的浏览器tab(子页面),需要的数据由主页面传到子页面进行展示,但是其中还有如下问题


0 判断当前请求是https协议

window.location.protocol == "https:"(冒号不要忘l)


1 IE下不支持postMessage 所以首先得过滤IE

   

if ((navigator.userAgent.indexOf('MSIE') >= 0) && (navigator.userAgent.indexOf('Opera') < 0)) {


             alert("IE暂不支持");


   

 

2 主页面打开新的页面



      var myPopup = window.open(url); //myPopup 表示子页面


3.主页面监听子页面信息


       //监听消息
  function listener() {

    //监听新窗口的关闭事件
    var loop = setInterval(function () {


      if (myPopup.closed) { //如果子窗口关闭


        clearInterval(loop);


        loop = null;

        //解绑定事件 如果没有这个动作就可以出现如下情况:关闭子页面后重新打开一个 会重复绑定监听事件
        window.removeEventListener('message', handler);


      }
    }, 1000);


    //如果没有关闭 则和新窗口进行通信
    if (loop) {


      window.addEventListener('message', handler, false);


    }


  }


  //处理接收到的消息
  function handler(e) {


    if (e.data.type == 'giveMeInfo') {

      postMessage.type = "info";


      postMessage.geoData = ruleData[2].payloadGeoFenceRules;


      postMessage.account = window.adminInfo.account;


      myPopup.postMessage(postMessage, '*');


    } else if (e.data.type == 'giveYouInfo') {


      console.info('地理围栏:     ' + e.data.data);


      //存储地理围栏数据
      ruleData[2].payloadGeoFenceRules = e.data.data;


      postMessage.type = "confirm";


      postMessage.data = "编辑成功";


      myPopup.postMessage(postMessage, '*');


    }


  }


4  

//获得协议和主机

 _protocolAndPort: function () {
    var ref;
    ref = that.location.protocol + '//' + that.location.host + '/';
    return ref;
  },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值