Răsfoiți Sursa

feat: 增强邮箱获取功能,自动尝试获取 DuckDuckGo 邮箱并提供手动粘贴提示

QLHazyCoder 4 luni în urmă
părinte
comite
099066987d
2 a modificat fișierele cu 15 adăugiri și 6 ștergeri
  1. 3 1
      README.md
  2. 12 5
      sidepanel/sidepanel.js

+ 3 - 1
README.md

@@ -182,6 +182,7 @@ Step 3 使用的注册邮箱。
 
 ### Step 3: Fill Email / Password
 
+- 如果侧边栏邮箱为空,会先尝试自动获取 DuckDuckGo 邮箱;失败时再提示手动粘贴
 - 自动填写邮箱
 - 如页面先要求邮箱,再进入密码页,会自动切页继续填写
 - 使用自定义密码或自动生成密码
@@ -342,7 +343,8 @@ sidepanel/                 侧边栏 UI
 如果 Duck 页面打不开、未登录或按钮变化:
 
 - 直接在 `Email` 输入框中粘贴邮箱
-- 再继续执行 Step 3 或 Auto Continue
+- 手动点 `Step 3` 时,如果邮箱为空,脚本会先自动尝试获取 Duck 邮箱;失败后再改为手填
+- Auto 暂停时,仍可手动粘贴邮箱后点击 `Continue`
 
 ### 4. Step 8 失败时重点检查
 

+ 12 - 5
sidepanel/sidepanel.js

@@ -268,7 +268,8 @@ function escapeHtml(text) {
   return div.innerHTML;
 }
 
-async function fetchDuckEmail() {
+async function fetchDuckEmail(options = {}) {
+  const { showFailureToast = true } = options;
   const defaultLabel = '获取';
   btnFetchEmail.disabled = true;
   btnFetchEmail.textContent = '...';
@@ -291,7 +292,9 @@ async function fetchDuckEmail() {
     showToast(`已获取 ${response.email}`, 'success', 2500);
     return response.email;
   } catch (err) {
-    showToast(`自动获取失败:${err.message}`, 'error');
+    if (showFailureToast) {
+      showToast(`自动获取失败:${err.message}`, 'error');
+    }
     throw err;
   } finally {
     btnFetchEmail.disabled = false;
@@ -311,10 +314,14 @@ document.querySelectorAll('.step-btn').forEach(btn => {
   btn.addEventListener('click', async () => {
     const step = Number(btn.dataset.step);
     if (step === 3) {
-      const email = inputEmail.value.trim();
+      let email = inputEmail.value.trim();
       if (!email) {
-        showToast('请先粘贴邮箱,或先点击获取。', 'warn');
-        return;
+        try {
+          email = await fetchDuckEmail({ showFailureToast: false });
+        } catch (err) {
+          showToast(`自动获取失败:${err.message},请手动粘贴邮箱后重试。`, 'warn');
+          return;
+        }
       }
       await chrome.runtime.sendMessage({ type: 'EXECUTE_STEP', source: 'sidepanel', payload: { step, email } });
     } else {