From 8ac1adabdc1a2b0f24d5ce11ae60d752216172d2 Mon Sep 17 00:00:00 2001 From: "bob.rao" Date: Sat, 22 Apr 2023 11:42:05 +0800 Subject: [PATCH] upgrade to manifest_version v3 --- bulkDeleteConversations.js | 24 +++++++++++++++++- manifest.json | 51 +++++++++++++++++--------------------- popup.js | 26 +++++++++++++++---- 3 files changed, 67 insertions(+), 34 deletions(-) diff --git a/bulkDeleteConversations.js b/bulkDeleteConversations.js index 10a9831..80ec2d6 100644 --- a/bulkDeleteConversations.js +++ b/bulkDeleteConversations.js @@ -66,7 +66,21 @@ async function bulkDeleteConversations() { if (confirmButton) { console.log("点击确认按钮...") confirmButton.click(); - await new Promise(resolve => setTimeout(resolve, 1000)); // Add a delay of 1 second + // await new Promise(resolve => setTimeout(resolve, 1000)); // Add a delay of 1 second + // 等待删除按钮消失 + const deleteButtonDisappeared = new Promise((resolve) => { + const observer = new MutationObserver(() => { + if (!document.querySelector('.absolute.flex.right-1.z-10.text-gray-300.visible')) { + observer.disconnect(); + resolve(); + } + }); + observer.observe(document.body, { + childList: true, + subtree: true, + }); + }); + await deleteButtonDisappeared; } } @@ -102,6 +116,12 @@ async function bulkDeleteConversations() { } async function addCheckboxesWithState(checkedIndexes) { + // 移除现有的复选框 + const existingCheckboxes = document.querySelectorAll('.conversation-checkbox'); + existingCheckboxes.forEach((checkbox) => { + checkbox.remove(); + }); + // 在这里重新添加复选框 const conversations = document.querySelectorAll('.flex.py-3.px-3.items-center.gap-3.relative.rounded-md.hover\\:bg-\\[\\#2A2B32\\].cursor-pointer.break-all.hover\\:pr-4.group'); conversations.forEach((conversation, index) => { @@ -122,6 +142,8 @@ async function addCheckboxesWithState(checkedIndexes) { for (let i = 0; i < remainingCheckboxes.length; i++) { remainingCheckboxes[i].dataset.index = i; } + + return Promise.resolve(); } bulkDeleteConversations(); \ No newline at end of file diff --git a/manifest.json b/manifest.json index bd731f0..31a1f1c 100644 --- a/manifest.json +++ b/manifest.json @@ -1,29 +1,24 @@ { - "manifest_version": 2, - "name": "ChatGPT Bulk Delete", - "version": "1.0", - "description": "A Chrome extension to bulk delete ChatGPT conversations", - "icons": { - "48": "icon48.png" - }, - "browser_action": { - "default_icon": "icon48.png", - "default_popup": "popup.html", - "default_title": "Bulk Delete Conversations" - }, - "permissions": [ - "activeTab", - "storage" - ], - "background": { - "scripts": ["background.js"], - "persistent": false - }, - "content_scripts": [ - { - "matches": ["*://chat.openai.com/*"], - "js": ["addCheckboxes.js", "bulkDeleteConversations.js"] - } - ] - } - \ No newline at end of file + "manifest_version": 3, + "name": "ChatGPT Bulk Delete", + "version": "1.0", + "description": "A Chrome extension to bulk delete ChatGPT conversations", + "icons": { + "48": "icon48.png" + }, + "action": { + "default_icon": "icon48.png", + "default_popup": "popup.html", + "default_title": "Bulk Delete Conversations" + }, + "permissions": [ + "scripting", + "activeTab" + ], + "content_scripts": [ + { + "matches": ["*://chat.openai.com/*"], + "js": ["addCheckboxes.js", "bulkDeleteConversations.js"] + } + ] +} diff --git a/popup.js b/popup.js index 4e31e5e..f9e3029 100644 --- a/popup.js +++ b/popup.js @@ -1,14 +1,30 @@ document.getElementById('add-checkboxes').addEventListener('click', () => { - chrome.tabs.executeScript({ file: 'addCheckboxes.js' }); + chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => { + chrome.scripting.executeScript({ + target: { tabId: tab.id }, + files: ['addCheckboxes.js'] + }); }); - +}); + document.getElementById('bulk-delete').addEventListener('click', () => { - chrome.tabs.executeScript({ file: 'bulkDeleteConversations.js' }); + chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => { + chrome.scripting.executeScript({ + target: { tabId: tab.id }, + files: ['bulkDeleteConversations.js'] + }); + }); }); document.getElementById('remove-checkboxes').addEventListener('click', () => { - chrome.tabs.executeScript({ file: 'removeCheckboxes.js' }); -}); + 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();