feat(browser): Cookie 备份导入——配套扩展走 chrome.cookies 官方明文通道
This commit is contained in:
@@ -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
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user