补齐换号扩展联动接口

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
LongtailandCopilot committed 2026-11-01 15:11:40 +08:00
1 parent 778384b83d
commit 8f6669e3a6
2 files changed
+23 -1

No files matched your search

+2
View File
@@ -1,5 +1,7 @@
# 广谈大湾网 · 随机换号扩展 3.0.4
2026-11-01:补齐新闻工作台联动接口。页面宿主 `#dww11-extension-panel` 的 `data-auto-news-state` 只公开 `ready`、`idle`、`paused` 三个状态,不包含账号或密码;监听 `dww11:auto-stop` 以暂停未完成流程,包括抽号或恢复响应尚未返回的情况。覆盖原目录后需要重新加载扩展并刷新网站,账号库和抽取记录保留。ZIP 未重新打包。
将提供的 `dww11-acc-switch.user.js` 重写为 Chrome / Edge Manifest V3 扩展。无需运行本机服务,无需持续授权本地文件,也无需安装 npm 依赖。
## 安装
+21 -1
View File
@@ -9,6 +9,7 @@
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
const visible = el => !!el && !!el.getClientRects().length && getComputedStyle(el).visibility !== 'hidden';
let flow = null, busy = false, running = false, panel, message, nextButton, resumeButton, retryButton, stopButton;
let bridgeHost, bridgeReady = false, stopRevision = 0;
let actions, toolbar, panelToggle, hideButton, restoreButton, panelHidden = false, visibilitySaving = false;
class Stopped extends Error {}
@@ -39,6 +40,11 @@
}
function controls() {
if (!nextButton) return;
// Only lifecycle flags cross into the page; never credentials or account data.
bridgeHost?.setAttribute('data-auto-news-state', JSON.stringify({
ready: bridgeReady, idle: bridgeReady && !busy && !running && !flow,
paused: !!flow?.paused
}));
nextButton.disabled = busy || !!flow;
resumeButton.hidden = !flow || (!flow.paused && running);
resumeButton.disabled = busy || running;
@@ -107,6 +113,9 @@
async function suspend(reason) {
if (flow && !flow.paused) {
const run = flow.id;
flow.paused = true;
flow.reason = reason;
controls();
try { await request('/suspend', { run, reason }); }
finally { if (flow?.id === run) { flow.paused = true; flow.reason = reason; } }
}
@@ -165,14 +174,19 @@
}
async function begin() {
if (location.hostname === 'dww11.com') { location.assign(HOME); return; }
const revision = stopRevision;
await recordRestriction();
if (revision !== stopRevision) return;
flow = (await request('/start')).flow;
if (revision !== stopRevision) { await suspend('新闻工作台已终止流程。'); return; }
await drive();
}
async function resume(retry = false) {
if (location.hostname === 'dww11.com') { location.assign(HOME); return; }
if (retry && !confirm('将重新提交本次抽到的账号(不抽新账号)。如上次提交已成功,可能再次登录。确认重试?')) return;
const revision = stopRevision;
flow = (await request('/resume')).flow;
if (revision !== stopRevision) { await suspend('新闻工作台已终止流程。'); return; }
if (retry) {
await save({ phase: 'logout', hops: 0, submittedAt: null, probedAt: null, invalidError: null });
location.assign(HOME);
@@ -291,6 +305,7 @@
function mount() {
const host = document.createElement('div');
bridgeHost = host;
host.id = 'dww11-extension-panel';
const root = host.attachShadow({ mode: 'closed' });
const style = document.createElement('style');
@@ -328,6 +343,7 @@
const info = await request('/hello');
panelVisibility(info.panelHidden);
flow = info.flow;
bridgeReady = true;
if (flow && !info.owned) {
flow.paused = true;
show('存在未完成流程。可在原标签页继续;原标签关闭后可在此接续。', true);
@@ -338,5 +354,9 @@
await recordRestriction();
}
}
init().catch(e => { if (message) { panelVisibility(false); show('扩展启动失败:' + e.message, true); } });
document.addEventListener('dww11:auto-stop', () => {
stopRevision++;
if (flow && !flow.paused) void suspend('新闻工作台已终止流程。').catch(e => show(e.message, true));
});
init().catch(e => { bridgeReady = false; if (message) { panelVisibility(false); show('扩展启动失败:' + e.message, true); } });
})();