設定好消息格式如下:
let message = {
"resourseId": "assetId",
"childrenResourseIds": [],
"topoId": "self.topoId",
"InfoSource": "2D"
}
如果在同一腳本中可以直接獲取到對應的值。如下:
message.topoId
當我們向窗口發送消息讓其他窗口接收到消息,需要通過
window.postMessage(message, "*");
此處要傳對象而不是json字符串,否則在接收方無法通過消息體獲取到對應key的值。
接收消息代碼如下:
window.addEventListener(
"message",
function (e) {
var data=e.data;
console.log(data);
console.log(data.topoId);
console.log(e);
},
false
);
2019.11.27更
當我們切換頁面的時候,監聽依然存在,第一浪費性能,第二可能影響後續的程序運行。所以我們要在切換頁面之前將監聽事件移除。
vue中移除代碼如下:
beforeDestroy() {
//在組件生命週期結束的時候銷燬。
console.log("dcvim移除函數");
window.removeEventListener("message", this.ListernerHandle, false);
console.log("dcvim移除結束");
}
beforeDestroy是vue的聲明週期函數,在頁面被銷燬前會被調用。注意:要移除監聽,就要修改增加監聽的函數形式。在增加監聽的位置不可以使用匿名函數。且要確定在增加監聽和移除監聽的參數一樣。
如:
window.addEventListener("message", this.ListernerHandle, false);
研究了一下午,再加上有時候vue編譯啓動後時好時壞。第一次編譯程序沒有正常運行,當我在vue中加入log再次重新啓動竟然好用了。領導說我是新手哪裏沒弄懂,搞錯了,我表示很無奈。
最近做js心情超級差,尋思不懂的問題問下公司裏做js的,可是都是回的不會,查百度。我驚呆了,程序員有這麼冷漠嗎。或者說做js的都這麼冷漠嗎?之前的公司互相探討問題都能講一下午,巴不得你來問我問題。也許是這個大公司的氛圍就是這樣吧,冰冷的辦公室。努力,跳離這個圈!