跨域嵌套传递信息(iframe)

跨域嵌套传递信息

最常见的就是iframe
一般用户gis地图航拍或者嵌套其他网页的页面之类的

postMessage 之间的传值问题
  • 父组件里面嵌套了子组件
 	<div>222</div>
    <iframe id="iframeid" src="./index4.html" frameborder="0"></iframe>
父传子
  let title='shfdsjkj'
  window.onload = () => {
        document.getElementById('iframeid').contentWindow.postMessage({ type: ames }, '*')//传的数据
    }
 window.addEventListener('message', e => {
        console.log(e.data.type, '===========');
    },false)

这里讲几个重点

  • 首先父组件的传值时候一定要写在文档加载完成之后
    因为如果不写onload就会出现iframe渲染完毕但是并没有找到对应方法或者值就是undefiend,这里考虑到执行顺序
子传父
 window.parent.postMessage({
        type: 'addTemplateLayers'
    }, '*');
 function addFn(data) {
        console.log(data);
 }
	//这是传递字符串
  window.addEventListener("message", getMessage);
  function getMessage(e) {
        console.log(e.data.type, '222');//addTemplateLayers
  }
  //这两行代码可以合并
   window.addEventListener("message", e=>{
        console.log(e.data.type,'第二次哦');
    });
	//使用子组件的方法
	 window.onload = () => {
        document.getElementById('iframeid').contentWindow.addFn('我是父组件调用子组件')
    }

这里同理也要写在onload上面,首先获取iframeid的window元素,直接调取子组件里面的方法

到这里postMessage就已经传值完毕了 ,不清楚的欢迎留言

vue,react的话只需要在mounted,useEffuct里面写就好了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菜鸟学代码··

给打赏的我会单独一对一讲解

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值