程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 消息-JS HTML5跨域跨窗口通信postMessage問題求幫助

消息-JS HTML5跨域跨窗口通信postMessage問題求幫助

編輯:編程綜合問答
JS HTML5跨域跨窗口通信postMessage問題求幫助
 this.exportUnits = d;
                 var g = "status=no,resizable=no,scrollbars=yes,personalbar=no,directories=no,location=no,toolbar=no,menubar=no,width=760,height=530,left=60,top=80";

                 this.popupWindow = b.open(a.settings.multiPopupUrl, "", g);
                 if (this.exportUnits && this.exportUnits.length) {
                     var bs = JSON.stringify(this.exportUnits);
                     this.popupWindow.postMessage(bs, a.settings.multiPopupUrl)
                 }


上述代碼是打開一個新窗口同時postMessage一段消息到彈出的新窗口,但是彈出的新窗口有時收到有時收不到,收到的幾率很少,求大神幫助

下面是新窗口接收的代碼

 function loadImg() {
     window.addEventListener("message", receiveMessage, false);
 }
 function receiveMessage(event) {
     alert(event.origin);
     alert(event.data);
     alert(event.source);
 } 

最佳回答:


你哪時注調用loadImg()這個放在注冊onmessage事件的?不會是在body的onload事件中吧。。這樣注冊事件太晚了,你是打開窗口後就直接發信息了,你打開的窗口可能都還沒注冊onmessage事件先

注冊onmessage事件不要放到onload中,script直接放到head標簽中進行注冊

 <head>
 function receiveMessage(event) {
     alert(event.origin);
     alert(event.data);
     alert(event.source);
 } 
window.addEventListener("message", receiveMessage, false);
</head>

延時發送信息。這個延時時間不好確定,應為打開的頁面依賴於網速,要是很慢,10多s才打開延時也無效了。。最好是發送信息的頁面也注冊onmessage事件,然後被打開的頁面注冊好事件後發送信息過來通知說我注冊號事件了,你再發送信息過去。。這個邏輯你自己實現了,也不難~

  if (this.exportUnits && this.exportUnits.length) {
                var me=this;
                setTimeout(function(){
              var bs = JSON.stringify(me.exportUnits);
              me.popupWindow.postMessage(bs, a.settings.multiPopupUrl)
                },1000);//延時1秒發送信息
 }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved