fix(context-menu): inject content script on demand and add logging
Ensure the content script is present by injecting it if no receiver exists, then retry collection. Add debug logs and a badge/title update for feedback.
This commit is contained in:
parent
c34227e3b6
commit
f7e7b3fb99
1 changed files with 27 additions and 2 deletions
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue