使用postMessage方法完成跨域頁面通信

  • 背景:本項目A中的用戶管理打開另一個系統B的用戶管理頁面,需要傳遞用戶信息。

  • 問題:
    1.需要傳遞用戶相關信息,所以不能通過url傳遞參數,存在安全風險;
    2.兩個系統,跨域,無法單純使用sessionStorage或localStorage

  • 方案:
    1.使用iframe + postMessage;
    2.使用postMessage

方案一:
1.A頁面中加入iframe,鏈接爲B(只要這個iframe地址和B的用戶管理同源即可),將其隱藏.
2.A用戶管理頁面打開B的頁面前,頁面內使用iframe.postMessage發送相關信息。然後打開B的頁面
3.1中鏈接的B頁面中需加入事件監聽window.addEventListener(“message”, function(e){}),接收message
4.此時,若1中的B的鏈接爲同一個url,則可以直接使用3中的message,若爲同源其他頁面,則在監聽事件中將message存入localStorage,即可以所有同源頁面都可取到message
問題:如果鏈入的B的頁面加載慢,有可能傳值失敗,要在iframe加載成功後使用postMessage

方案二:
1.先打開B頁面,且B的頁面的事件監聽要在A使用postMessage之前生效
2.A發送postMessage,B接收並存於localStorage
問題:要確保A的postMessage要在B的監聽事件生效後發送,可使用setTimeout

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章