diff --git a/app/chrome-extension/entrypoints/element-picker.content.ts b/app/chrome-extension/entrypoints/element-picker.content.ts index 72f1de95..4f43373b 100644 --- a/app/chrome-extension/entrypoints/element-picker.content.ts +++ b/app/chrome-extension/entrypoints/element-picker.content.ts @@ -194,8 +194,8 @@ export default defineContentScript({ // Register message listener chrome.runtime.onMessage.addListener(handleMessage); - // Cleanup on page unload - window.addEventListener('unload', () => { + // Cleanup on page unload (using pagehide for Chrome 120+ permissions policy compatibility) + window.addEventListener('pagehide', () => { chrome.runtime.onMessage.removeListener(handleMessage); controller?.dispose(); controller = null; diff --git a/app/chrome-extension/entrypoints/quick-panel.content.ts b/app/chrome-extension/entrypoints/quick-panel.content.ts index c25fd723..a629e933 100644 --- a/app/chrome-extension/entrypoints/quick-panel.content.ts +++ b/app/chrome-extension/entrypoints/quick-panel.content.ts @@ -103,8 +103,8 @@ export default defineContentScript({ // Register message listener chrome.runtime.onMessage.addListener(handleMessage); - // Cleanup on page unload - window.addEventListener('unload', () => { + // Cleanup on page unload (using pagehide for Chrome 120+ permissions policy compatibility) + window.addEventListener('pagehide', () => { chrome.runtime.onMessage.removeListener(handleMessage); if (controller) { controller.dispose();