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.
This commit is contained in:
Tommy D. Rossi
2026-03-12 15:36:12 +01:00
parent 1ced689153
commit 36f3801451
+3 -3
View File
@@ -1524,7 +1524,7 @@ chrome.contextMenus
.remove('playwriter-pin-element') .remove('playwriter-pin-element')
.catch(() => {}) .catch(() => {})
.finally(() => { .finally(() => {
chrome.contextMenus.create({ chrome.contextMenus?.create({
id: 'playwriter-pin-element', id: 'playwriter-pin-element',
title: 'Copy Playwriter Element Reference', title: 'Copy Playwriter Element Reference',
contexts: ['all'], contexts: ['all'],
@@ -1535,7 +1535,7 @@ chrome.contextMenus
function updateContextMenuVisibility(): void { function updateContextMenuVisibility(): void {
const { currentTabId, tabs } = store.getState() const { currentTabId, tabs } = store.getState()
const isConnected = currentTabId !== undefined && tabs.get(currentTabId)?.state === 'connected' 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) => { 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 if (info.menuItemId !== 'playwriter-pin-element' || !tab?.id) return
const tabInfo = store.getState().tabs.get(tab.id) const tabInfo = store.getState().tabs.get(tab.id)