diff --git a/src/background/index.js b/src/background/index.js index 84dcd9b..798484f 100644 --- a/src/background/index.js +++ b/src/background/index.js @@ -17,6 +17,29 @@ browser.runtime.onMessage.addListener(async (msg, sender) => { } }); +async function collectFromTab(tabId) { + try { + // Try asking an existing content script first + const items = await browser.tabs.sendMessage(tabId, { type: 'collectLinks' }); + return items || []; + } catch (err) { + // If there is no receiver yet, inject the content script and retry + const noReceiver = /Receiving end does not exist|Could not establish connection/i.test(String(err)); + try { + if (noReceiver) { + try { await browser.tabs.executeScript(tabId, { file: 'src/content/collect.js' }); } catch (_) {} + const items = await browser.tabs.sendMessage(tabId, { type: 'collectLinks' }); + return items || []; + } + } catch (err2) { + // Log and rethrow below + console.warn('collectFromTab retry failed:', err2); + } + console.warn('collectFromTab failed:', err); + throw err; + } +} + // Context menu to collect links on archive.org /download/* pages browser.runtime.onInstalled.addListener(() => { try { @@ -34,7 +57,7 @@ browser.runtime.onInstalled.addListener(() => { browser.contextMenus.onClicked.addListener(async (info, tab) => { if (info.menuItemId !== 'aolg-collect' || !tab?.id) return; try { - const items = await browser.tabs.sendMessage(tab.id, { type: 'collectLinks' }); + const items = await collectFromTab(tab.id); const count = (items || []).length; await browser.storage.local.set({ lastCollected: { tabId: tab.id, url: tab.url, time: Date.now(), count }, @@ -42,7 +65,9 @@ browser.contextMenus.onClicked.addListener(async (info, tab) => { }); try { await browser.browserAction.setBadgeBackgroundColor({ color: '#3b82f6' }); } catch (e) {} try { await browser.browserAction.setBadgeText({ text: count ? String(count) : '' }); } catch (e) {} + try { await browser.browserAction.setTitle({ title: count ? `Collected ${count} link(s)` : 'No links collected' }); } catch (e) {} + console.debug('Collected links from page:', { count }); } catch (e) { - // Swallow errors; context menu is best-effort + console.warn('Context menu collection failed:', e); } });