feat(browser): Cookie 备份导入——配套扩展走 chrome.cookies 官方明文通道

This commit is contained in:
Rick Ye
2026-09-13 01:22:21 +08:00
parent 2efcd8e346
commit 573ac5bcde
9 changed files with 309 additions and 8 deletions
@@ -0,0 +1,47 @@
// 导出全部 Cookie 为 JSON 备份(chrome.cookies API 返回明文——Chrome 官方提供给扩展的通道)
const statusEl = document.getElementById('status')
const button = document.getElementById('export')
function setStatus(text) {
statusEl.textContent = text
}
button.addEventListener('click', async () => {
button.disabled = true
try {
setStatus('正在读取 Cookie…')
const cookies = await chrome.cookies.getAll({})
if (!cookies || cookies.length === 0) {
setStatus('未读取到任何 Cookie。')
return
}
const payload = {
format: 'aso-cookie-export',
version: 1,
exportedAt: new Date().toISOString(),
cookies: cookies.map((c) => ({
name: c.name,
value: c.value,
domain: c.domain,
hostOnly: c.hostOnly === true,
path: c.path || '/',
secure: c.secure === true,
httpOnly: c.httpOnly === true,
...(typeof c.expirationDate === 'number' ? { expirationDate: c.expirationDate } : {}),
...(c.sameSite && c.sameSite !== 'unspecified' ? { sameSite: c.sameSite } : {})
}))
}
const blob = new Blob([JSON.stringify(payload)], { type: 'application/json' })
const url = URL.createObjectURL(blob)
const d = new Date()
const pad = (n) => String(n).padStart(2, '0')
const filename = `aso-cookies-${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}.json`
await chrome.downloads.download({ url, filename, saveAs: true })
URL.revokeObjectURL(url)
setStatus(`已导出 ${payload.cookies.length} 条 Cookie。回到 Inkreach Agent:设置 → 浏览器 → Cookie 备份导入,选择刚保存的文件。`)
} catch (err) {
setStatus('导出失败:' + (err && err.message ? err.message : String(err)))
} finally {
button.disabled = false
}
})