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秒發送信息
}