-
背景:本項目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