diff --git a/globals.js b/globals.js index d7dd214..8dc2029 100644 --- a/globals.js +++ b/globals.js @@ -1,16 +1,26 @@ -console.log('globals.js loaded'); +if (typeof window.globalsLoaded === 'undefined') { + console.log('globals.js loaded'); -let lastChecked = null; + window.globalsLoaded = true; -let Selectors = { - // Plus 用户的选择器 - conversationsCheckbox: '.conversation-checkbox:checked', - deleteButton: '[class*="text-red"]', - confirmDeleteButton: 'button.btn.btn-danger', - threeDotButton: '[id^="radix-"]', - // 其他 Plus 用户选择器... - CONVERSATION_SELECTOR: 'div > div > div > div > div > div > nav > div > div > div > div > ol > li > div > a', - TITLE_SELECTOR: '.relative.grow.overflow-hidden.whitespace-nowrap', -}; + let lastChecked = null; -let CHECKBOX_CLASS = 'conversation-checkbox'; \ No newline at end of file + let Selectors = { + // Plus 用户的选择器 + conversationsCheckbox: '.conversation-checkbox:checked', + deleteButton: '[class*="text-red"]', + confirmDeleteButton: 'button.btn.btn-danger', + threeDotButton: '[id^="radix-"]', + // 其他 Plus 用户选择器... + CONVERSATION_SELECTOR: 'div > div > div > div > div > div > nav > div > div > div > div > ol > li > div > a', + TITLE_SELECTOR: '.relative.grow.overflow-hidden.whitespace-nowrap', + }; + + let CHECKBOX_CLASS = 'conversation-checkbox'; + + window.lastChecked = lastChecked; + window.Selectors = Selectors; + window.CHECKBOX_CLASS = CHECKBOX_CLASS; +} else { + console.log('globals.js already loaded, skipping re-initialization'); +} \ No newline at end of file diff --git a/popup.js b/popup.js index e6edd74..6d31fc6 100644 --- a/popup.js +++ b/popup.js @@ -1,43 +1,37 @@ -document.getElementById('add-checkboxes').addEventListener('click', () => { - chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => { +function loadGlobalsThenExecute(tabId, secondaryScript) { + chrome.scripting.executeScript({ + target: { tabId: tabId }, + files: ['globals.js'] + }, () => { chrome.scripting.executeScript({ - target: { tabId: tab.id }, - files: ['addCheckboxes.js'] + target: { tabId: tabId }, + files: [secondaryScript] }); }); -}); +} -document.getElementById('bulk-delete').addEventListener('click', () => { - chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => { - chrome.scripting.executeScript({ - target: { tabId: tab.id }, - files: ['bulkDeleteConversations.js'] +function addButtonListener(buttonId, scriptName) { + document.getElementById(buttonId).addEventListener('click', () => { + chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => { + if (tab) { + loadGlobalsThenExecute(tab.id, scriptName); + } }); }); -}); +} -document.getElementById('toggle-checkboxes').addEventListener('click', () => { - chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => { - chrome.scripting.executeScript({ - target: { tabId: tab.id }, - files: ['toggleCheckboxes.js'] - }); - }); -}); - -document.getElementById('remove-checkboxes').addEventListener('click', () => { - chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => { - chrome.scripting.executeScript({ - target: { tabId: tab.id }, - files: ['removeCheckboxes.js'] - }); - }); -}); - - -// Update copyright year -const currentYear = new Date().getFullYear(); -document.getElementById('copyright').innerHTML = - '© ' + currentYear + ' qcrao@GitHub'; +function initializeButtons() { + addButtonListener('add-checkboxes', 'addCheckboxes.js'); + addButtonListener('bulk-delete', 'bulkDeleteConversations.js'); + addButtonListener('toggle-checkboxes', 'toggleCheckboxes.js'); + addButtonListener('remove-checkboxes', 'removeCheckboxes.js'); +} +function updateCopyrightYear() { + const currentYear = new Date().getFullYear(); + document.getElementById('copyright').innerHTML = + `© ${currentYear} qcrao@GitHub`; +} +initializeButtons(); +updateCopyrightYear();