天天看點

iframe父頁面傳遞參數給子頁面

父頁面通過ifarame傳遞參數
有些時候,我們需要在嵌套頁面。
我們就需要使用iframe了。
通過iframe傳遞參數給子頁面。
需求描述,當我們點選按鈕的時候。
傳遞參數給子頁面。子頁面接受後展示出來。
我們使用postMessage() 方法用于安全地實作跨源通信。
otherWindow.postMessage(message, targetOrigin, [transfer]);
第一個參數你傳遞的消息
第二個參數你傳遞的位址。(其值可以是 *(表示無限制)或者一個 URI)
第三個參數transfer可選,是一串和 message 同時傳遞的 Transferable 對象。
這些對象的所有權将被轉移給消息的接收方,而發送一方将不再保有所有權。      
父頁面傳遞參數
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>父頁面給子頁面傳遞參數</title>
    <style>
        html,
        body {
            height: 100%;
        }
    </style>
</head>
<body>
    <div>
        <input id="text" type="text" value="Runoob" />
        <button id="sendMessage">發送消息</button>
    </div>
    <iframe id="receiver" src="http://127.0.0.1:8848/%E7%A5%9E%E5%A5%87%E7%9A%84display/index.html" width="100%" height="100%">
        <p>我是标題</p>
    </iframe>
    <script>
        window.onload = function() {
            //擷取iframe視窗的 contentWindow 屬性
            var receiver = document.getElementById('receiver').contentWindow;
            console.log('receiver', receiver)
            // 給按鈕綁定點選事件
            var btn = document.getElementById('sendMessage');
            btn.addEventListener('click', function(e) {
                // 阻止事件的預設行為
                e.preventDefault();
                var val = document.getElementById('text').value;
                // 傳遞資料給子頁面.是我另外一個伺服器的位址[http://127.0.0.1:8848]
                receiver.postMessage("Hello " + val + "!", "http://127.0.0.1:8848");
            });
        }
    </script>
</body>
</html>      
子頁面接受參數
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
  #divdemo{
     background:pink;
  }
    </style>
</head>
<div id="recMessage">
  我是子頁面
</div>

</body>
<script>
window.onload = function() {
    var messageEle = document.getElementById('recMessage');
    window.addEventListener('message', function (e) {  // 監聽 message 事件
  console.log("e",e)
        alert('消息來自的位址',e.origin);
        if (e.origin !== "http://127.0.0.1:5500") {  // 驗證消息來源位址。這個位址是父頁面的位址
            return;
        }
        messageEle.innerHTML = "從"+ e.origin +"收到消息: " + e.data;
    });
}
</script>
</html>      
iframe父頁面傳遞參數給子頁面

遇見問題,這是你成長的機會,如果你能夠解決,這就是收獲。

作者:晚來南風晚相識