首頁  >  文章  >  web前端  >  你對javascript中的postMessage怎麼用嗎?

你對javascript中的postMessage怎麼用嗎?

藏色散人
藏色散人轉載
2021-09-12 16:44:063413瀏覽

父頁、子頁面,兩個頁面不同網域,之間對話用到了postMessage。下面為了方便統稱為F、C頁。

C頁按鈕的點擊事件傳送一個訊息小C,F頁收到訊息小C執行邏輯LC,LC執行完畢,F頁傳送一個訊息小F,C頁收到訊息小F執行邏輯LF。一句話,就是F、C頁間相互通信。

可以認為

類似於react中的父子元件通訊。

C頁js程式碼:

var btnObj = document.getElementById('buttons');
btnObj.onclick = function(){
     var defaultAdData = {
                 type:'advert', 
                 gameData:{
                     adId: '123'
                 }
         };
     window.parent.postMessage(JSON.stringify(defaultAdData), '*');
    /*我是错误代码:
     var receiveMessage = function(event) {
         var datas = JSON.parse(event.data);
         if (datas.type === "adGivePrize"&&datas.givePrize) {
             alert(‘click’);
         }
     }
     window.addEventListener("message", receiveMessage, false);*/
 }
 /*我是正确代码:
 var receiveMessage = function(event) {
     var datas = JSON.parse(event.data);
     if (datas.type === "adGivePrize"&&datas.givePrize) {
         alert(‘click’);
     }
 }
 window.addEventListener("message", receiveMessage, false);*/

F頁js程式碼:

var receiveMessage = function(event) {
      var datas = JSON.parse(event.data);
      if (datas.type === "advert") {
            var postIframeData = {
                    type:'adGivePrize',
                    givePrize:true
            };
            //iframe发送信息~~~~
            window.frames[0].postMessage(JSON.stringify(postIframeData), '*');
      }
}

window.addEventListener("message", receiveMessage, false);

總之,此方法提供了兩個不相干頁面的通信,使得外建的項目或內嵌的iframe,可以互相通信。

推薦學習:《javascript基礎教學

以上是你對javascript中的postMessage怎麼用嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除