diff --git a/public/content.js b/public/content.js index 96def474..661975a3 100644 --- a/public/content.js +++ b/public/content.js @@ -28,10 +28,12 @@ document.addEventListener('PandaRequest', (e) => { params.domain = window.location.hostname; - chrome.runtime.sendMessage({ action: type, params }, responseCallback); + chrome.runtime.sendMessage({ action: type, params }, buildResponseCallback(e.detail.messageId)); }); -const responseCallback = (response) => { - const responseEvent = new CustomEvent('PandaResponse', { detail: response }); - document.dispatchEvent(responseEvent); +const buildResponseCallback = (messageId) => { + return (response) => { + const responseEvent = new CustomEvent(messageId, { detail: response }); + document.dispatchEvent(responseEvent); + }; }; diff --git a/public/inject.js b/public/inject.js index d0fb8815..485f9769 100644 --- a/public/inject.js +++ b/public/inject.js @@ -2,8 +2,9 @@ const createPandaMethod = (type) => { return async (params) => { return new Promise((resolve, reject) => { // Send request + const messageId = `${type}-${Date.now()}-${Math.random()}`; const requestEvent = new CustomEvent('PandaRequest', { - detail: { type, params }, + detail: { messageId, type, params }, }); document.dispatchEvent(requestEvent); @@ -15,12 +16,10 @@ const createPandaMethod = (type) => { } else { reject(e.detail.error); } - - document.removeEventListener('PandaResponse', onResponse); } } - document.addEventListener('PandaResponse', onResponse, { once: true }); + document.addEventListener(messageId, onResponse, { once: true }); }); }; };