From ec0f342ee4344f3a84c995988635b933fd407a02 Mon Sep 17 00:00:00 2001 From: jinghui Date: Wed, 21 Oct 2026 09:58:24 +0800 Subject: [PATCH] =?UTF-8?q?v1.10.7:=20=E8=B4=AD=E4=B9=B0=E9=A1=B5=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=8F=B7=E6=9C=AC=E5=9C=B0=E6=8C=81=E4=B9=85=E5=8C=96?= =?UTF-8?q?=E2=80=94=E2=80=94=E5=85=B3=E9=A1=B5=E9=9D=A2=E9=87=8D=E5=BC=80?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=81=A2=E5=A4=8D=E8=AE=A2=E5=8D=95=E7=BB=A7?= =?UTF-8?q?=E7=BB=AD=E6=9F=A5=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 8 ++++++++ buy.js | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++- manifest.json | 2 +- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dda462..7349fae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ B站评论助手 版本历史。下载:https://dl.88531.cn/bili.html ·  --- +## v1.10.7 · 2026-10-21 + +### ✨ 新功能 +- **关掉购买页也不会丢卡**:订单号自动存在本地(30 分钟内有效),重新打开购买页会**自动恢复上次未完成的订单并继续查询支付结果**,套餐也会自动选回 +- 拿到卡密/激活成功后自动清除本地待处理订单,不会残留旧订单 + +--- + ## v1.10.6 · 2026-10-21 ### ✨ 新功能 diff --git a/buy.js b/buy.js index cb41099..ba9b3b1 100644 --- a/buy.js +++ b/buy.js @@ -7,6 +7,30 @@ let pollTimer = null; let lastPayType = null; // 记住当前支付方式,「重新下单」时直接复用 let payHelpShown = false; let helpTipStage = 0; // 1=30秒提示 2=120秒提示;同阶段不重复覆盖刚点出来的反馈 +const PENDING_KEY = 'biliBuyPendingOrder'; + +/** 订单号落本地:关掉页面再回来也能接着查卡,不会「付了钱拿不到码」 */ +function savePending() { + try { + localStorage.setItem(PENDING_KEY, JSON.stringify({ + orderNo, payType: lastPayType, + cardTypeId: selected ? selected.id : null, at: Date.now() + })); + } catch (e) { /* 隐私模式下不可用则忽略 */ } +} + +function clearPending() { + try { localStorage.removeItem(PENDING_KEY); } catch (e) {} +} + +function readPending(maxAgeMs) { + try { + const d = JSON.parse(localStorage.getItem(PENDING_KEY) || 'null'); + if (!d || !d.orderNo) return null; + if (!d.at || Date.now() - d.at > maxAgeMs) { clearPending(); return null; } + return d; + } catch (e) { return null; } +} function esc(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, (c) => ({ @@ -79,6 +103,7 @@ async function createOrder(payType) { if (!res || !res.ok) throw new Error((res && res.message) || '创建订单失败'); orderNo = res.order.orderNo; + savePending(); status.textContent = `订单 ${orderNo}(¥${res.order.amount})已创建,正在打开支付页面…`; if (res.payUrl) window.open(res.payUrl, '_blank'); startPolling(); @@ -110,11 +135,13 @@ async function queryOrderOnce() { if (res.activated) { clearInterval(pollTimer); pollTimer = null; + clearPending(); showActivated(res); } else if (res.cardKey) { clearInterval(pollTimer); pollTimer = null; hidePayHelp(); + clearPending(); const status = $('order-status'); status.className = 'order-status error'; status.innerHTML = '✗ 已支付并已发卡,但自动激活未成功(' + @@ -180,6 +207,30 @@ function hidePayHelp() { if (tip) tip.textContent = ''; } +/** 打开购买页时恢复上次未完成的订单:关掉页面也不会「付了钱拿不到码」 */ +function resumePending() { + const d = readPending(30 * 60 * 1000); + if (!d) return; + orderNo = d.orderNo; + if (d.payType) lastPayType = d.payType; + if (d.cardTypeId && !selected) { + const p = packages.find((x) => String(x.id) === String(d.cardTypeId)); + if (p) { + selected = p; + document.querySelectorAll('.package').forEach((el) => { + el.classList.toggle('active', el.dataset.id === String(d.cardTypeId)); + }); + $('chosen-package').innerHTML = `已选商品:${esc(p.name)} 价格 ¥${esc(p.price)} ${esc(durationText(p.duration_days))}`; + $('step-pay').hidden = false; + } + } + $('order-panel').hidden = false; + const st = $('order-status'); + st.className = 'order-status pending'; + st.textContent = '⏳ 已恢复上次未完成的订单 ' + orderNo + ',正在查询支付结果…'; + startPolling(); +} + function wirePayHelp() { const rf = $('ph-refresh'), rn = $('ph-renew'); if (rf) rf.addEventListener('click', async () => { @@ -266,4 +317,4 @@ $('cb-copy') && $('cb-copy').addEventListener('click', async () => { }); wirePayHelp(); -loadPackages(); +loadPackages().then(resumePending); diff --git a/manifest.json b/manifest.json index 272f8cd..cb58e41 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "B站评论助手", - "version": "1.10.6", + "version": "1.10.7", "description": "B站网页版关键词评论助手:按搜索关键词找视频,默认模拟真人(打开视频页、滚到评论区、逐字输入、点发布),也可快速API直发;支持下载当前页视频;带防重复记录、可中断执行与页面实时进度浮层。", "permissions": ["storage", "tabs", "scripting", "sidePanel", "downloads", "declarativeNetRequest", "alarms"], "host_permissions": [