49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
// content.js — 在 xueqiu.com 页面里跑,document.cookie 读非 HttpOnly 的 cookie,
|
||
// 然后缓存起来等 popup 来取。
|
||
// 注意:document.cookie 读不到 HttpOnly(xq_a_token 是 HttpOnly 拿不到)
|
||
// 但能拿到 u、device_id 等普通 cookie,作为辅助数据。
|
||
|
||
(function () {
|
||
const PAGE_CACHE_KEY = "__xueqiu_sync_page_cache__";
|
||
const TTL_MS = 30_000;
|
||
|
||
function read() {
|
||
const out = { url: location.href, cookies: {}, ts: Date.now() };
|
||
try {
|
||
const pairs = document.cookie.split(";");
|
||
for (const p of pairs) {
|
||
const idx = p.indexOf("=");
|
||
if (idx > 0) {
|
||
const k = p.slice(0, idx).trim();
|
||
const v = decodeURIComponent(p.slice(idx + 1).trim());
|
||
if (k) out.cookies[k] = v;
|
||
}
|
||
}
|
||
} catch (_) {}
|
||
return out;
|
||
}
|
||
|
||
function update() {
|
||
try {
|
||
window[PAGE_CACHE_KEY] = read();
|
||
} catch (_) {}
|
||
}
|
||
|
||
update();
|
||
// 兜底:每 5s 刷一次,捕获导航/SPA 切换
|
||
setInterval(update, 5000);
|
||
|
||
// 响应 popup 的查询
|
||
chrome.runtime.onMessage.addListener((msg, _sender, sendResponse) => {
|
||
if (msg && msg.type === "xueqiu_sync/get_page_cookies") {
|
||
let cache = window[PAGE_CACHE_KEY];
|
||
if (!cache || Date.now() - cache.ts > TTL_MS) {
|
||
cache = read();
|
||
window[PAGE_CACHE_KEY] = cache;
|
||
}
|
||
sendResponse(cache);
|
||
return true;
|
||
}
|
||
});
|
||
})();
|