first commit

This commit is contained in:
ytc1012
2025-12-10 18:18:30 +08:00
commit 760f3ec0d0
18 changed files with 2588 additions and 0 deletions

168
popup.js Normal file
View File

@@ -0,0 +1,168 @@
// popup.js - 弹出窗口逻辑
let isBlurMode = false;
let currentMode = 'element'; // 'element' or 'selection'
console.log('[BlurText] Popup script loaded');
// 获取页面元素
const toggleBtn = document.getElementById('toggleBlur');
const toggleText = document.getElementById('toggleText');
const clearAllBtn = document.getElementById('clearAll');
const blurIntensitySlider = document.getElementById('blurIntensity');
const intensityValue = document.getElementById('intensityValue');
const statusDiv = document.getElementById('status');
const modeElementBtn = document.getElementById('modeElement');
const modeSelectionBtn = document.getElementById('modeSelection');
const usageTip = document.getElementById('usageTip');
// 从存储中加载模糊强度
chrome.storage.local.get(['blurIntensity'], (result) => {
if (result.blurIntensity) {
blurIntensitySlider.value = result.blurIntensity;
intensityValue.textContent = result.blurIntensity + 'px';
}
});
// 模糊强度滑块变化
blurIntensitySlider.addEventListener('input', (e) => {
const value = e.target.value;
intensityValue.textContent = value + 'px';
// 保存到存储
chrome.storage.local.set({ blurIntensity: value });
// 通知 content script 更新强度
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
chrome.tabs.sendMessage(tabs[0].id, {
action: 'updateIntensity',
intensity: value
});
});
});
// 模式切换
[modeElementBtn, modeSelectionBtn].forEach(btn => {
btn.addEventListener('click', () => {
const mode = btn.dataset.mode;
currentMode = mode;
// 更新UI
document.querySelectorAll('.mode-btn').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
// 更新使用提示
updateUsageTip(mode);
// 如果已经在模糊模式中,通知 content script 切换模式
if (isBlurMode) {
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
chrome.tabs.sendMessage(tabs[0].id, {
action: 'switchMode',
mode: mode
});
});
}
});
});
// 更新使用提示
function updateUsageTip(mode) {
if (mode === 'element') {
usageTip.innerHTML = `
<strong>元素模式:</strong><br>
1. 点击"开启模糊模式"<br>
2. 鼠标悬停元素查看高亮<br>
3. 点击元素进行模糊<br>
4. 再次点击取消模糊
`;
} else {
usageTip.innerHTML = `
<strong>文本选择模式:</strong><br>
1. 点击"开启模糊模式"<br>
2. 拖动鼠标选择文本<br>
3. 点击浮动按钮模糊文本<br>
4. 可多次选择和模糊
`;
}
}
// 切换模糊模式
toggleBtn.addEventListener('click', async () => {
try {
console.log('[BlurText] Toggle button clicked');
const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
if (!tab) {
console.error('[BlurText] No active tab found');
statusDiv.innerHTML = '<span class="icon">⚠️</span> 无法获取当前标签页';
return;
}
isBlurMode = !isBlurMode;
console.log('[BlurText] New blur mode state:', isBlurMode);
// 发送消息给 content script
chrome.tabs.sendMessage(tab.id, {
action: 'toggleBlurMode',
enabled: isBlurMode,
mode: currentMode,
intensity: blurIntensitySlider.value
}, (response) => {
if (chrome.runtime.lastError) {
console.error('[BlurText] Error sending message:', chrome.runtime.lastError);
statusDiv.innerHTML = '<span class="icon">⚠️</span> 请刷新页面后重试';
statusDiv.className = 'status';
isBlurMode = !isBlurMode; // 恢复状态
} else {
console.log('[BlurText] Message sent successfully');
}
});
// 更新 UI
updateUI();
} catch (error) {
console.error('[BlurText] Error in toggle:', error);
statusDiv.innerHTML = '<span class="icon">❌</span> 发生错误,请重试';
}
});
// 清除所有模糊
clearAllBtn.addEventListener('click', async () => {
const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
chrome.tabs.sendMessage(tab.id, {
action: 'clearAll'
});
statusDiv.innerHTML = '<span class="icon">✅</span> 已清除所有模糊效果';
statusDiv.className = 'status';
setTimeout(() => {
statusDiv.innerHTML = '<span class="icon">💡</span> 点击下方按钮开始使用';
}, 2000);
});
// 更新 UI 状态
function updateUI() {
if (isBlurMode) {
toggleText.textContent = '关闭模糊模式';
toggleBtn.classList.remove('btn-primary');
toggleBtn.classList.add('btn-secondary');
statusDiv.innerHTML = '<span class="icon">✨</span> 模糊模式已开启,点击网页文字进行模糊';
statusDiv.className = 'status active';
} else {
toggleText.textContent = '开启模糊模式';
toggleBtn.classList.add('btn-primary');
toggleBtn.classList.remove('btn-secondary');
statusDiv.innerHTML = '<span class="icon">💡</span> 点击下方按钮开始使用';
statusDiv.className = 'status';
}
}
// 监听来自 content script 的消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === 'blurModeDisabled') {
isBlurMode = false;
updateUI();
}
});