diff options
Diffstat (limited to 'ext/js/background')
| -rw-r--r-- | ext/js/background/backend.js | 29 | ||||
| -rw-r--r-- | ext/js/background/offscreen-proxy.js | 1 | ||||
| -rw-r--r-- | ext/js/background/script-manager.js | 28 | 
3 files changed, 38 insertions, 20 deletions
| diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js index 294c11db..d042a253 100644 --- a/ext/js/background/backend.js +++ b/ext/js/background/backend.js @@ -1831,16 +1831,7 @@ export class Backend {          }          try { -            const tabWindow = await new Promise((resolve, reject) => { -                chrome.windows.get(tab.windowId, {}, (value) => { -                    const e = chrome.runtime.lastError; -                    if (e) { -                        reject(new Error(e.message)); -                    } else { -                        resolve(value); -                    } -                }); -            }); +            const tabWindow = await this._getWindow(tab.windowId);              if (!tabWindow.focused) {                  await /** @type {Promise<void>} */ (new Promise((resolve, reject) => {                      chrome.windows.update(tab.windowId, {focused: true}, () => { @@ -1859,6 +1850,23 @@ export class Backend {      }      /** +     * @param {number} windowId +     * @returns {Promise<chrome.windows.Window>} +     */ +    _getWindow(windowId) { +        return new Promise((resolve, reject) => { +            chrome.windows.get(windowId, {}, (value) => { +                const e = chrome.runtime.lastError; +                if (e) { +                    reject(new Error(e.message)); +                } else { +                    resolve(value); +                } +            }); +        }); +    } + +    /**       * @param {number} tabId       * @param {number} frameId       * @param {?number} [timeout=null] @@ -2208,6 +2216,7 @@ export class Backend {      async _injectAnkiNoteDictionaryMedia(ankiConnect, timestamp, dictionaryMediaDetails) {          const targets = [];          const detailsList = []; +        /** @type {Map<string, {dictionary: string, path: string, media: ?import('dictionary-database').MediaDataStringContent}>} */          const detailsMap = new Map();          for (const {dictionary, path} of dictionaryMediaDetails) {              const target = {dictionary, path}; diff --git a/ext/js/background/offscreen-proxy.js b/ext/js/background/offscreen-proxy.js index e65ec65e..9e7b5b74 100644 --- a/ext/js/background/offscreen-proxy.js +++ b/ext/js/background/offscreen-proxy.js @@ -88,6 +88,7 @@ export class OffscreenProxy {          if (!chrome.runtime.getContexts) { // Chrome version below 116              // Clients: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/clients              // @ts-expect-error - Types not set up for service workers yet +            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment              const matchedClients = await clients.matchAll();              // @ts-expect-error - Types not set up for service workers yet              return await matchedClients.some((client) => client.url === offscreenUrl); diff --git a/ext/js/background/script-manager.js b/ext/js/background/script-manager.js index 84213452..ea1702e9 100644 --- a/ext/js/background/script-manager.js +++ b/ext/js/background/script-manager.js @@ -60,16 +60,7 @@ export function injectStylesheet(type, content, tabId, frameId, allFrames) {   * @returns {Promise<boolean>} `true` if a script is registered, `false` otherwise.   */  export async function isContentScriptRegistered(id) { -    const scripts = await new Promise((resolve, reject) => { -        chrome.scripting.getRegisteredContentScripts({ids: [id]}, (result) => { -            const e = chrome.runtime.lastError; -            if (e) { -                reject(new Error(e.message)); -            } else { -                resolve(result); -            } -        }); -    }); +    const scripts = await getRegisteredContentScripts([id]);      for (const script of scripts) {          if (script.id === id) {              return true; @@ -155,3 +146,20 @@ function createContentScriptRegistrationOptions(details, id) {      }      return options;  } + +/** + * @param {string[]} ids + * @returns {Promise<chrome.scripting.RegisteredContentScript[]>} + */ +function getRegisteredContentScripts(ids) { +    return new Promise((resolve, reject) => { +        chrome.scripting.getRegisteredContentScripts({ids}, (result) => { +            const e = chrome.runtime.lastError; +            if (e) { +                reject(new Error(e.message)); +            } else { +                resolve(result); +            } +        }); +    }); +} |