Sometimes totally ramdomly the extension just PopUp another instance, so I end with multiple extensions launched. How can avoid this? I've tryed many different things and looks like no one of these works.
chrome.action.onClicked.addListener(function (listener) {
openExtension();
});
let queue = [];
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
switch (request.type) {
case "extension-connect":
queue.push({ type: "new-pairing", message: request.message, origin: request.origin });
openExtension();
break;
case "extension-send":
queue.push({ type: "send-transaction", message: request.message, origin: request.origin });
openExtension();
break;
case "wallet-ready":
queue.forEach(queueElem => {
chrome.runtime.sendMessage({ type: queueElem.type, message: queueElem.message, origin: queueElem.origin });
})
break;
}
sendResponse();
});
let popupTabId = null;
let popupWindowId = null;
function openExtension() {
console.log('tabId: ', popupTabId)
if (!popupTabId) openTabPopup();
else {
chrome.tabs.get(popupTabId, function (tab) {
console.log('Tab info: ', tab)
if (chrome.runtime.lastError || !tab) {
console.log('Chrome error: ', chrome.runtime.lastError)
popupTabId = null;
openTabPopup();
} else {
chrome.tabs.update(tab.id, { active: true });
chrome.windows.update(popupWindowId, { focused: true })
}
});
}
}
function openTabPopup() {
var options_url = chrome.runtime.getURL('index.html');
chrome.tabs.create(
{
url: options_url,
active: false
},
function (tab) {
popupTabId = tab.id;
chrome.windows.create({
tabId: tab.id,
type: 'popup',
focused: true,
width: 600,
height: 850,
left: 1000,
top: 0
}, (window) => {
popupWindowId = window.id;
});
}
);
}