| 13 | const eventId = generateUniqueID(); |
| 14 | |
| 15 | const callbackFunction = (event: Event) => { |
| 16 | if (!(event instanceof MessageEvent)) { |
| 17 | return; |
| 18 | } |
| 19 | |
| 20 | const eventData: MessageEvent = event; |
| 21 | |
| 22 | if ( |
| 23 | !eventData.data.eventId || |
| 24 | !eventData.data.resultId || |
| 25 | eventData.data.eventId !== eventId |
| 26 | ) |
| 27 | return; |
| 28 | |
| 29 | window.removeEventListener('message', callbackFunction); |
| 30 | |
| 31 | const resultElement = document.getElementById(eventData.data.resultId); |
| 32 | if (!resultElement) throw new Error('Result element not found'); |
| 33 | const data = resultElement.getAttribute(`data-${eventId}`); |
| 34 | resultElement.remove(); |
| 35 | if (!data) throw new Error('Result data not found'); |
| 36 | const result = JSON.parse(data); |
| 37 | con.m('ScriptProxy').info('Result Received', result[this.elementId]); |
| 38 | if (!result[this.elementId] && retry > 0) { |
| 39 | con.m('ScriptProxy').info('Retrying'); |
| 40 | setTimeout(() => { |
| 41 | resolve(this.getData(retry - 1)); |
| 42 | }, 1000); |
| 43 | } else { |
| 44 | resolve(result[this.elementId]); |
| 45 | } |
| 46 | }; |
| 47 | |
| 48 | window.addEventListener('message', callbackFunction, false); |
| 49 | window.postMessage({ eventId }, '*'); |