demo · v132

Spot the broken event listeners

Paste your code — or pick from common patterns — and the scanner highlights the broken patterns. navigator.storage.addEventListener calls now throw. Plus a checklist to mark off as you migrate.

scanner

checking…

before / after patterns

before (broken in v132)

navigator.storage.addEventListener(
  "quotachange",
  () => refresh()
);
navigator.storage.onquotachange = refresh;
// EventTarget-shaped helpers
const proto = Object.getPrototypeOf(navigator.storage);
proto.addEventListener.call(navigator.storage, ...);

after (works everywhere)

// poll
setInterval(async () => {
  const e = await navigator.storage.estimate();
  refresh(e);
}, 60000);
// observe via Storage Buckets quota change
const b = await navigator.storageBuckets.open("default");
const e = await b.estimate();
// (no quotachange event — check on writes)
// or just call estimate() after big writes
async function bigWrite(blob) {
  await ofsStore.add(blob);
  refresh(await navigator.storage.estimate());
}

migration checklist

Grep navigator.storage.addEventListener in your codebase
Grep navigator.storage.onquotachange
Grep for inherited EventTarget patterns on storage
Replace with periodic navigator.storage.estimate() polling
Or refresh after every write path that grows storage
Drop any try/catch around the old addEventListener call
Test in Chrome 132+ that no TypeError fires on load

see also