// Service Worker - 后台脚本 // 扩展安装时执行 chrome.runtime.onInstalled.addListener((details) => { console.log('扩展已安装', details.reason); // 初始化存储 chrome.storage.local.set({ visitCount: 0, installedAt: Date.now() }); }); // 监听来自其他脚本的消息 chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { console.log('收到消息:', request, '来自:', sender); if (request.action === 'getData') { // 处理获取数据的请求 chrome.storage.local.get(null, (data) => { sendResponse({ success: true, data }); }); return true; // 保持消息通道开启以支持异步响应 } if (request.action === 'saveData') { // 处理保存数据的请求 chrome.storage.local.set(request.data, () => { sendResponse({ success: true }); }); return true; } sendResponse({ success: false, error: '未知操作' }); }); // 监听标签页更新 chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { if (changeInfo.status === 'complete' && tab.url) { console.log('页面加载完成:', tab.url); } }); // ==================== 书签事件监听 ==================== // 书签创建 chrome.bookmarks.onCreated.addListener((id, bookmark) => { console.log('📌 书签已创建:', bookmark); // bookmark 包含: id, parentId, index, url, title, dateAdded notifyBookmarkEvent('created', bookmark); }); // 书签删除 chrome.bookmarks.onRemoved.addListener((id, removeInfo) => { console.log('🗑️ 书签已删除:', removeInfo); // removeInfo 包含: parentId, index, node (被删除的书签信息) notifyBookmarkEvent('removed', removeInfo.node); }); // 书签修改(标题或URL) chrome.bookmarks.onChanged.addListener((id, changeInfo) => { console.log('✏️ 书签已修改:', id, changeInfo); // changeInfo 包含: title, url notifyBookmarkEvent('changed', { id, ...changeInfo }); }); // 书签移动 chrome.bookmarks.onMoved.addListener((id, moveInfo) => { console.log('📁 书签已移动:', id, moveInfo); // moveInfo 包含: parentId, index, oldParentId, oldIndex notifyBookmarkEvent('moved', { id, ...moveInfo }); }); // 通知书签事件(可选:存储到本地或发送通知) async function notifyBookmarkEvent(type, data) { // 获取现有的事件记录 const result = await chrome.storage.local.get(['bookmarkEvents']); const events = result.bookmarkEvents || []; // 添加新事件(保留最近50条) events.unshift({ type, data, timestamp: Date.now() }); if (events.length > 50) { events.pop(); } await chrome.storage.local.set({ bookmarkEvents: events }); console.log(`书签事件已记录: ${type}`); } // ==================== 变通方案:监控导航来源 ==================== // 虽然无法直接监控书签点击,但可以通过 webNavigation 监控导航 // 结合书签列表进行匹配判断 chrome.webNavigation.onCommitted.addListener(async (details) => { // 只处理主框架导航 if (details.frameId !== 0) return; // transitionType 可能的值: // - "link" - 点击链接 // - "typed" - 地址栏输入 // - "auto_bookmark" - 从书签打开(但这个值很少出现) // - "generated" - 其他方式 if (details.transitionType === 'auto_bookmark') { console.log('🔖 可能从书签打开:', details.url); } // 另一种方式:检查URL是否在书签中 if (details.transitionType === 'typed' || details.transitionType === 'generated') { try { const bookmarks = await chrome.bookmarks.search({ url: details.url }); if (bookmarks.length > 0) { console.log('📖 访问了已收藏的网址:', details.url, bookmarks[0].title); } } catch (e) { // 忽略错误 } } });