How to use IndexedDB from Chrome Extension Service Workers
Asked Answered
S

1

10

I'm "happily" rebuilding some of my Chrome Extensions to MV3. But I'm stuck because I can't understand how to use IndexedDB from service workers. To be more specific, I haven't found any working example of IndexedDB access from a JS service worker script.

Referring to this page, I used to open a db like this:

var idb = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB;
var dbName = "DatabaseName";
var open = idb.open(dbName, 1);

But as we all know, window is not accessible anymore from service workers in MV3.

To put it simply, background pages provide extension authors with an environment that lives independent of any other window or tab.

(https://developer.chrome.com/docs/extensions/mv3/migrating_to_service_workers/#state)

How am I supposed to do it?

Thanks for your help, time, and patience. Have a great weekend!

Spiculate answered 12/3, 2022 at 17:28 Comment(0)
S
14

The answer is simpler than I thought. indexedDB is already defined when used in service workers and does not need to be related to the window object. It's ready-to-use.

var dbName = "DatabaseName";
var open = indexedDB.open(dbName, 1);

I'll leave this question in case someone else has the same doubt.

Spiculate answered 12/3, 2022 at 18:37 Comment(2)
The examples with window.xxx usually assume all web browsers including IE, which is unnecessary for chrome extensions that only run in modern browsers, so just access the API directly, assuming it is exposed for workers in the specification or MDN (see the compat table).Mode
The only way I could make it work was to add either the storage or unlimitedStorage permission in the v3 manifest. Otherwise, I was getting misleading errors.Karinekariotta

© 2022 - 2024 — McMap. All rights reserved.