js iframe通过postMessage实现父子页面传值

一、语法

otherWindow.postMessage(message, targetOrigin);
  • otherWindow 其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象、或者是命名过或数值索引的window.frames。
  • postMessage中第一个参数代表要传回的值,第二个是限定消息接收范围(域名设置),不限制使用 '*’。

二、父页面向子页面传值

父页面

function handleEvent() {
      // iframe的id
      var id = document.getElementById('if');
      // 触发子页面的监听事件
      id.contentWindow.postMessage('我是父元素传给子元素的数据哦!', '*');
    }

子页面

// 注册消息事件监听,接受父元素给的数据
    window.addEventListener('message', (e) => {
      alert(e.data);
    }, false);

三、子页面向父页面传值

子页面

function handleEvent() {
      // 触发父页面的监听事件
      window.postMessage('我是子元素传给父元素的数据哦!', '*');
    }

父页面

// 注册消息事件监听,接受子元素给的数据
    window.addEventListener('message', (e) => {
      alert(e.data);
    }, false);

四、实例

父页面a.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>父页面</title>
</head>

<body>
  <button onclick="handleEvent()">向子页面发送信息</button>
  <p>我是父页面</p>
  <iframe src="b.html" id="if"></iframe>
  <script>
    function handleEvent() {
      // iframe的id
      var id = document.getElementById('if');
      // 触发子页面的监听事件
      id.contentWindow.postMessage('我是父元素传给子元素的数据哦!', '*');
    }

    // 注册消息事件监听,接受子元素给的数据
    window.addEventListener('message', (e) => {
      alert(e.data);
    }, false);
  </script>
</body>

</html>

子页面b.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>子页面</title>
</head>

<body>
  <button onclick="handleEvent()">向父页面发送信息</button>
  <p>我是子页面</p>
  <script>
    // 注册消息事件监听,接受父元素给的数据
    window.addEventListener('message', (e) => {
      alert(e.data);
    }, false);

    function handleEvent() {
      // 触发父页面的监听事件
      window.postMessage('我是子元素传给父元素的数据哦!', '*');
    }
  </script>
</body>

</html>
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值