diff --git a/README.md b/README.md index 687afed..15046cb 100644 --- a/README.md +++ b/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 失败时重点检查 diff --git a/sidepanel/sidepanel.js b/sidepanel/sidepanel.js index 5915d0e..11a4564 100644 --- a/sidepanel/sidepanel.js +++ b/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 {