chrome.runtime.onInstalled.addListener(() => { chrome.storage.sync.set({ blockedSites: [] }); updateDeclarativeNetRequestRules(); }); chrome.storage.onChanged.addListener((changes, namespace) => { if (namespace === 'sync' && changes.blockedSites) { updateDeclarativeNetRequestRules(); } }); async function updateDeclarativeNetRequestRules() { const { blockedSites } = await chrome.storage.sync.get('blockedSites'); const rules = blockedSites.map((site, index) => ({ id: index + 1, priority: 1, action: { type: 'block' }, condition: { urlFilter: `||${site}^`, resourceTypes: ['script'] } })); await chrome.declarativeNetRequest.updateDynamicRules({ removeRuleIds: rules.map(rule => rule.id), addRules: rules }); }