google-chrome-extensionfirefox-addonfirefox-addon-webextensionsweb-extension

Using `window` globals in ManifestV3 service worker background script


I'm working on a Manifest v3 browser extension where I need to identify the browser in which the extension is currently running from the backgroundScript. Since ManifestV3 extension uses a service worker, it doesn't have DOM or window. So I'm not able to use window.navigator.userAgent.

I found a related question which talks about how to gets window height and width information, but I couldn't find any other information to fetch the userAgent of the browser.

Is this possible?


Solution

  • Neutral globals

    Things like navigator aren't specific to visual representation of a window.
    Just omit window. and read it directly:

    Window-specific globals

    Things specific to user interaction or visual/aural representation like DOM or AudioContext, or those that may show a prompt for user permissions.

    Not available in a worker. The workaround is to split that part of the code into the offscreen document and use messaging to pass the data back and forth. It can be chrome.runtime messaging or navigator.serviceWorker messaging, which supports binary data like Uint8Array, Blob, Map, etc.

    Aliases for window

    Use them instead of window for code clarity or if a local variable is named just as a global property.