iframe嵌套页面传值

一、父向子传值

        方法一:通过src拼接上需要传递的参数

   父页面

<body>
    <div>父级页面</div>
    <iframe src="2.html" id="frame1" frameborder="0"></iframe>
    <script>
        // 方法一:通过src向子元素传递参数
        let url = document.getElementById('frame1').src + '?name=LeeYuFan&sex=女' //拼接上需要传递的参数
        document.getElementById('frame1').src = url
    </script>
</body>

  子页面

<body>
    <div>子页面--2.html页面</div>
    <script>
        window.onload = function(){
            let name = getUrlParam('name')
            let sex =  decodeURIComponent(getUrlParam('sex')) //解码
            console.log(name,sex)
        }
        function getUrlParam(name) {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); // 构造一个含有目标参数的正则表达式对象
            var r = window.location.search.substr(1).match(reg); // 匹配目标参数
            if (r != null)
                return r[2];
            return null; // 返回参数值
        }
    </script>
</body>

方法二:通过window对象的postMessage()方法

  数据发送方(父页面)

<body>
    <div>父级页面</div>
    <iframe src="2.html" id="frame1" frameborder="0"></iframe>
    <script>
        window.onload = function(){
            // 方法二:通过postMessage()方法
            let send = document.getElementById('frame1').contentWindow;
            send.postMessage("被传递的数据",'*')
        }
    </script>
</body>

  数据接收方(子页面)

<body>
    <div>子页面--2.html页面</div>
    <script>
       window.onload = function(){
            window.addEventListener('message',function(e){
                console.log(e.data)
            })
       }
    </script>
</body>


注:

1、postMessage(参数1,参数2,[参数3])方法有三个参数,参数1代表将要发送的数据;参数2代表指定哪些窗口能结合搜到消息事件,其值可以是*或一个URL,(‘*’代表无限制);参数3可选,是一串和 message 同时传递的 Transferable 对象。这些对象的所有权将被转移给消息的接收方,而发送一方将不再保有所有权。

2、接收方的回调函数中包含三个常用的数据:

        e.source --消息源,消息发送的窗口/iframe

        e.origin -- 消息源的URI,用来验证数据源

        e.data -- 发送过来的数据

二、子向父传值

方法一:子页面把要传递给父元素的参数定义为全局变量,然后父页面直接获取子页面定义变量

<body>
    <script>
        var name = 'LeeYuFan'
    </script>
</body>

父页面读取变量

<body>
    <div>父级页面</div>
    <iframe src="3.html" id="frame2" frameborder="0"></iframe>
    <script>
        window.onload = function(){
            console.log(document.getElementById('frame2').contentWindow.name)
        }
    </script>
</body>


方法二:使用postMessage()方法

子页面

<body>
    <div>子页面--2.html页面</div>
    <script>
      window.parent.postMessage('123','*')
    </script>
</body>

父页面

<body>
    <div>父级页面</div>
    <iframe src="2.html" id="frame1" frameborder="0"></iframe>
    <script>
        window.onload = function(){
            window.addEventListener('message',function(e){
                console.log(e.data)
            })
        }
    </script>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值