From a8189ba25317a5fa49c712b16e43d453fd5e76bc Mon Sep 17 00:00:00 2001 From: Ariella Vu <20778143+digiwand@users.noreply.github.com> Date: Tue, 27 Sep 2022 15:29:27 -0300 Subject: [PATCH] MV3: catch "Duplicate script ID 'inpage'" error (#15973) * sw: catch Duplicate script ID 'inpage' error - related to #15958 * typo: cased -> caused --- app/scripts/app-init.js | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/app/scripts/app-init.js b/app/scripts/app-init.js index 4ae247c5b..450c59597 100644 --- a/app/scripts/app-init.js +++ b/app/scripts/app-init.js @@ -132,12 +132,27 @@ chrome.runtime.onMessage.addListener(() => { * MAIN world injection does not work properly via manifest * https://bugs.chromium.org/p/chromium/issues/detail?id=634381 */ -chrome.scripting.registerContentScripts([ - { - id: 'inpage', - matches: ['file://*/*', 'http://*/*', 'https://*/*'], - js: ['inpage.js'], - runAt: 'document_start', - world: 'MAIN', - }, -]); +const registerInPageContentScript = async () => { + try { + await chrome.scripting.registerContentScripts([ + { + id: 'inpage', + matches: ['file://*/*', 'http://*/*', 'https://*/*'], + js: ['inpage.js'], + runAt: 'document_start', + world: 'MAIN', + }, + ]); + } catch (err) { + /** + * An error occurs when app-init.js is reloaded. Attempts to avoid the duplicate script error: + * 1. registeringContentScripts inside runtime.onInstalled - This caused a race condition + * in which the provider might not be loaded in time. + * 2. await chrome.scripting.getRegisteredContentScripts() to check for an existing + * inpage script before registering - The provider is not loaded on time. + */ + console.warn(`Dropped attempt to register inpage content script. ${err}`); + } +}; + +registerInPageContentScript();