From 36f3801451f9fdd99725eedf1a86068bd65a8b01 Mon Sep 17 00:00:00 2001 From: "Tommy D. Rossi" Date: Thu, 12 Mar 2026 15:36:12 +0100 Subject: [PATCH] fix(extension): guard contextMenus calls when API is unavailable Prevent service worker startup crashes in environments where chrome.contextMenus is undefined. Use optional chaining for create, update, and onClicked registration so missing context menu APIs degrade gracefully instead of throwing uncaught TypeError. --- extension/src/background.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extension/src/background.ts b/extension/src/background.ts index 6022d74..96d00af 100644 --- a/extension/src/background.ts +++ b/extension/src/background.ts @@ -1524,7 +1524,7 @@ chrome.contextMenus .remove('playwriter-pin-element') .catch(() => {}) .finally(() => { - chrome.contextMenus.create({ + chrome.contextMenus?.create({ id: 'playwriter-pin-element', title: 'Copy Playwriter Element Reference', contexts: ['all'], @@ -1535,7 +1535,7 @@ chrome.contextMenus function updateContextMenuVisibility(): void { const { currentTabId, tabs } = store.getState() const isConnected = currentTabId !== undefined && tabs.get(currentTabId)?.state === 'connected' - chrome.contextMenus.update('playwriter-pin-element', { visible: isConnected }) + chrome.contextMenus?.update('playwriter-pin-element', { visible: isConnected }) } chrome.runtime.onInstalled.addListener((details) => { @@ -1653,7 +1653,7 @@ chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { } }) -chrome.contextMenus.onClicked.addListener(async (info, tab) => { +chrome.contextMenus?.onClicked.addListener(async (info, tab) => { if (info.menuItemId !== 'playwriter-pin-element' || !tab?.id) return const tabInfo = store.getState().tabs.get(tab.id)