/
groupmol
/
s21crx
Обзор
Документация
Войти
/
groupmol
/
s21crx
Код
Запросы
0
Задачи
Пакеты
0
Релизы
2
Аналитика
Безопасность
develop
src/content.js
57 строк
2 KB
groupmol
v2.1
17 фев 2026, 15:25
17 фев 2026, 15:25
1ee4528
Код
Авторство
О чём код?
let lastCount = ''; let checkInterval = null; const SELECTOR = '.MuiBadge-root > span.MuiBadge-badge'; console.log('[Content] Запущен:', location.href); chrome.runtime.sendMessage({ type: 'getCurrentCount' }, (res) => { if (res && res.count) lastCount = res.count; }); function safeSendMessage(message) { try { chrome.runtime.sendMessage(message); } catch (e) { if (e.message.includes('Extension context invalidated')) clearInterval(checkInterval); } } function checkNotifications() { const el = document.querySelector(SELECTOR); if (!el) { safeSendMessage({ type: 'connectionStatus', connected: false }); return; } safeSendMessage({ type: 'connectionStatus', connected: true }); const isVisible = !el.classList.contains('MuiBadge-invisible'); const currentCount = isVisible ? el.textContent.trim() || '0' : '0'; if (currentCount !== lastCount) { console.log('[Content] Изменение:', lastCount, '→', currentCount); safeSendMessage({ type: 'notificationChanged', count: currentCount }); lastCount = currentCount; } } checkInterval = setInterval(checkNotifications, 2000); setTimeout(checkNotifications, 1000); document.addEventListener('visibilitychange', () => { if (!document.hidden) setTimeout(checkNotifications, 500); }); chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.type === 'requestCount') { const el = document.querySelector(SELECTOR); if (el) { const isVisible = !el.classList.contains('MuiBadge-invisible'); const count = isVisible ? el.textContent.trim() || '0' : '0'; sendResponse({ count: count }); } else { sendResponse({ count: '0' }); } return true; } }); window.addEventListener('beforeunload', () => clearInterval(checkInterval));