index.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. class MessageCenter {
  2. constructor() {
  3. this.iframeMap = new Map();
  4. this.messageCallbackMap = new Map();
  5. // this.listen()
  6. }
  7. findIframeById(id) {
  8. let target = this.iframeMap.get(id);
  9. if (!target) {
  10. target = document.getElementById(id)
  11. this.iframeMap.set('id', target)
  12. }
  13. return target
  14. }
  15. send({ info, data }) {
  16. const target = this.findIframeById(info.iframeId);
  17. target && target.contentWindow.postMessage({
  18. info,
  19. data
  20. }, '*')
  21. }
  22. // ---- don't use ----
  23. // add(actionType, callback) {
  24. // let activeQuene = this.messageCallbackMap.get(actionType);
  25. // if (activeQuene?.length > 0) {
  26. // activeQuene.push(callback)
  27. // } else {
  28. // this.messageCallbackMap.set(actionType, [callback])
  29. // }
  30. // }
  31. // ---- don't use ----
  32. // listen() {
  33. // window.addEventListener('message', (e) => {
  34. // const { actionType, data } = e.data;
  35. // console.log('get message in content ...', actionType, data)
  36. // const quene = this.messageCallbackMap.get(actionType) || [];
  37. // while (quene.length > 0) {
  38. // let callback = quene.pop();
  39. // callback(data)
  40. // }
  41. // })
  42. // }
  43. }
  44. const messageCenter = new MessageCenter();
  45. export default messageCenter;