爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7369|回复: 0

[经验总结] 高德地图嵌入Vue并实现通信交互的方法

[复制链接]

新浪微博达人勋

发表于 2021-11-17 16:34:31 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
iframe例子.png

现在很多网站都需要使用高德地图,这里存在2个槛:


1、如何嵌入高德地图?


开发高德地图不能用webpack,而是原生开发,这导致我们必须以iframe的形式使用高德地图。
直接用iframe标签嵌入自己写的高德地图会失败,因为这里有一个叫"clickjacking"的安全机制,它阻止了自己的网页被其他网页嵌入,
我们需要在后端设置X_FRAME_OPTIONS,允许前端嵌入才行。


2、Vue页面与iframe通信问题


第1步,在vue中写一个iframe标签:
<iframe ref="iframe0"></iframe>

第2步,Vue新建一个对象,注意,这里的iframe0对应标签中的ref值
this.iframeWin = this.$refs.iframe0.contentWindow



第3步,准备一个函数,用以向iframe0发送信息:
sendMessage () {
      let x={cmd: 'success',test: '来自父页面的问候'}
      this.iframeWin.postMessage(x,'*')
    }


第3步,在高德地图的网页中,准备一个函数接收这个信息:
function handleMessage (event) {
      const data = event.data
      if (data.cmd==="success"){
        window.parent.postMessage({code:"success",test:"成功收到指示"}, '*');
      }
    }
window.addEventListener('message',handleMessage)//绑定函数


第4步,从高德地图的网页向父页面传信息:
let x={code: "success",test: "来自iframe的问候!"}
window.parent.postMessage({data:x}, '*');


第5步,在vue中写一个函数,接收高德地图发送的信息:
    handleMessage (event) {
      const data = event.data // iframe传来的数据
      // 处理之:
      if (data.code==="success"){
        alert(data.test)
      }
    }
window.addEventListener('message', this.handleMessage)//绑定函数



至此,就实现了高德地图的嵌入和交互。很银性,很好用!



密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表