index.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. class ContentMessageCenter {
  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. sendAll({ info, data }) {
  23. const targets = document.querySelectorAll('iframe[data-card=denet]') || []
  24. targets.forEach((item) => {
  25. item.contentWindow.postMessage({
  26. info,
  27. data
  28. }, '*')
  29. })
  30. }
  31. // ---- don't use ----
  32. // add(actionType, callback) {
  33. // let activeQuene = this.messageCallbackMap.get(actionType);
  34. // if (activeQuene?.length > 0) {
  35. // activeQuene.push(callback)
  36. // } else {
  37. // this.messageCallbackMap.set(actionType, [callback])
  38. // }
  39. // }
  40. // ---- don't use ----
  41. // listen() {
  42. // window.addEventListener('message', (e) => {
  43. // const { actionType, data } = e.data;
  44. // console.log('get message in content ...', actionType, data)
  45. // const quene = this.messageCallbackMap.get(actionType) || [];
  46. // while (quene.length > 0) {
  47. // let callback = quene.pop();
  48. // callback(data)
  49. // }
  50. // })
  51. // }
  52. }
  53. const contentMessageCenter = new ContentMessageCenter();
  54. export default contentMessageCenter;