// 监听当前活动标签页的变化
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
if (changeInfo.status === 'complete') {
// 当标签页加载完成后,保存标签页的相关信息
const tabData = {
url: tab.url,
title: tab.title,
// 可以根据需要添加其他信息
};
// 将数据存储到 chrome.storage.local 中
chrome.storage.local.set({ [tabId]: tabData }, () => {
console.log(`Tab data for tabId ${tabId} has been saved.`);
});
}
});
// 监听标签页关闭事件,清除存储的数据
chrome.tabs.onRemoved.addListener((tabId, removeInfo) => {
// 标签页关闭时,删除该标签页对应的数据
chrome.storage.local.remove(tabId.toString(), () => {
console.log(`Tab data for tabId ${tabId} has been removed.`);
});
});
// 其他可能的事件监听(例如窗口关闭或扩展被禁用时清理)
chrome.windows.onRemoved.addListener((windowId) => {
// 可添加额外逻辑,当整个窗口关闭时,处理特定的数据清理
});
// 从 storage 读取已存储的标签页数据(如果需要)
chrome.storage.local.get(null, (items) => {
console.log("Current storage:", items);
});
//////////////
// 自定义弹窗公告逻辑,带不同类型的 SVG 图标和颜色
function showCustomPopup(iconType, iconColor) {
const popup = document.createElement('div');
popup.style.position = 'fixed';
popup.style.bottom = '10px';
popup.style.right = '10px';
popup.style.backgroundColor = '#f1c40f';
popup.style.padding = '10px';
popup.style.zIndex = '1000';
popup.style.display = 'flex';
popup.style.alignItems = 'center';
// 动态生成 SVG 图标
const svgIcon = getSvgIcon(iconType, iconColor);
// 添加图标到弹窗
popup.innerHTML = `
${svgIcon}
<span style="margin-left: 10px;">这是一个自定义公告</span>
`;
document.body.appendChild(popup);
}
// 动态生成 SVG 图标,根据类型和颜色
function getSvgIcon(type, color) {
let svg = '';
switch (type) {
case 'info':
svg = `
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="${color}" viewBox="0 0 24 24">
<path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm0 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16zm1-7h-2v-5h2v5zm0 4h-2v-2h2v2z"/>
</svg>`;
break;
case 'warning':
svg = `
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="${color}" viewBox="0 0 24 24">
<path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/>
</svg>`;
break;
case 'success':
svg = `
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="${color}" viewBox="0 0 24 24">
<path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/>
</svg>`;
break;
default:
svg = `
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="${color}" viewBox="0 0 24 24">
<circle cx="12" cy="12" r="10" />
</svg>`;
break;
}
return svg;
}
// 加载配置后,判断是否显示弹窗并传入 SVG 图标类型和颜色
async function init() {
await loadConfig(); // 等待配置加载完成
// 根据 globalConfig 显示自定义弹窗公告,传入图标类型和颜色
if (globalConfig.showPopup) {
showCustomPopup('info', '#007bff'); // 'info' 图标, 蓝色
}
}
// 初始化
init();