diff --git a/src/background.ts b/src/background.ts index 54fc24f6..10e98354 100644 --- a/src/background.ts +++ b/src/background.ts @@ -153,6 +153,27 @@ chrome.runtime.onInstalled.addListener(function () { * @param {JSON} options */ async function registerFirefoxContentScript(options: Registration) { + if ("scripting" in chrome && "getRegisteredContentScripts" in chrome.scripting) { + // Bug in Firefox where you need to use browser namespace for this call + const getContentScripts = async (filter: browser.scripting.ContentScriptFilter) => { + if (isFirefoxOrSafari()) { + return await browser.scripting.getRegisteredContentScripts(filter); + } else { + return await chrome.scripting.getRegisteredContentScripts(filter); + } + }; + + const existingRegistrations = await getContentScripts({ + ids: [options.id] + }); + + if (existingRegistrations.length > 0 + && existingRegistrations[0].matches.every((match) => options.matches.includes(match))) { + // No need to register another script, already registered + return; + } + } + await unregisterFirefoxContentScript(options.id); if ("scripting" in chrome && "getRegisteredContentScripts" in chrome.scripting) { @@ -180,25 +201,11 @@ async function registerFirefoxContentScript(options: Registration) { * Only works on Firefox. * Firefox requires that this is handled by the background script */ -async function unregisterFirefoxContentScript(id: string) { +async function unregisterFirefoxContentScript(id: string) { if ("scripting" in chrome && "getRegisteredContentScripts" in chrome.scripting) { - // Bug in Firefox where you need to use browser namespace for this call - const getContentScripts = async (filter: browser.scripting.ContentScriptFilter) => { - if (isFirefoxOrSafari()) { - return await browser.scripting.getRegisteredContentScripts(filter); - } else { - return await chrome.scripting.getRegisteredContentScripts(filter); - } - }; - - const existingRegistrations = await getContentScripts({ + await chrome.scripting.unregisterContentScripts({ ids: [id] }); - if (existingRegistrations?.length > 0) { - await chrome.scripting.unregisterContentScripts({ - ids: existingRegistrations.map((script) => script.id), - }); - } } else { if (contentScriptRegistrations[id]) { contentScriptRegistrations[id].unregister(); diff --git a/src/utils.ts b/src/utils.ts index bc55f467..7b3a3841 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -54,7 +54,6 @@ export default class Utils { if (!isFirefoxOrSafari() || isSafari()) { permissions.push("webNavigation"); } - console.log(permissions) chrome.permissions.request({ origins: this.getPermissionRegex(),