work/mvp/browser-extension/background/background.js
2025-12-17 22:30:44 +08:00

126 lines
3.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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) {
// 忽略错误
}
}
});