index.js 1.3 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(id, actionType, data) {
  16. const target = this.findIframeById(id);
  17. target && target.contentWindow.postMessage({
  18. actionType,
  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;