diff options
-rw-r--r-- | ext/js/background/backend.js | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js index 57565eec..abdf8271 100644 --- a/ext/js/background/backend.js +++ b/ext/js/background/backend.js @@ -2289,38 +2289,33 @@ class Backend { // https://developer.chrome.com/docs/extensions/reference/offscreen/ async _setupOffscreenDocument() { - // Check all windows controlled by the service worker to see if one - // of them is the offscreen document with the given path if (await this._hasOffscreenDocument()) { return; } - - // create offscreen document if (this._creatingOffscreen) { await this._creatingOffscreen; - } else { - this._creatingOffscreen = chrome.offscreen.createDocument({ - url: 'offscreen.html', - reasons: ['CLIPBOARD'], - justification: 'reason for needing the document' - }); - await this._creatingOffscreen; - this._creatingOffscreen = null; + return; } + + this._creatingOffscreen = chrome.offscreen.createDocument({ + url: 'offscreen.html', + reasons: ['CLIPBOARD'], + justification: 'reason for needing the document' + }); + await this._creatingOffscreen; + this._creatingOffscreen = null; } async _hasOffscreenDocument() { const offscreenUrl = chrome.runtime.getURL('offscreen.html'); - if (chrome.runtime.getContexts) { - const contexts = await chrome.runtime.getContexts({ - contextTypes: ['OFFSCREEN_DOCUMENT'], - documentUrls: [offscreenUrl] - }); - return Boolean(contexts.length); - } else { + if (!chrome.runtime.getContexts) { // chrome version <116 const matchedClients = await clients.matchAll(); - return await matchedClients.some((client) => { - client.url.includes(chrome.runtime.id); - }); + return !!(await matchedClients.some((client) => client.url === offscreenUrl)); } + + const contexts = await chrome.runtime.getContexts({ + contextTypes: ['OFFSCREEN_DOCUMENT'], + documentUrls: [offscreenUrl] + }); + return !!contexts.length; } } |