代码拉取完成,页面将自动刷新
const MAX_HISTORY = 100;
let requestHistory = new Map();
// 初始化开关状态
let isPluginEnabled = false;
// 监听来自 panel.js 的开关状态消息
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.type === 'TOGGLE_PLUGIN') {
isPluginEnabled = message.enabled;
}
});
// 请求监听
chrome.webRequest.onCompleted.addListener(
async (details) => {
if (!isPluginEnabled || details.method !== 'POST') return;
try {
const maxRetries = 3;
let retries = 0;
let har;
while (retries < maxRetries) {
try {
await new Promise(resolve => setTimeout(resolve, 1000)); // 延迟 1 秒
const response = await new Promise((resolve, reject) => {
chrome.runtime.sendMessage({ type: 'GET_HAR', details }, (response) => {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve(response);
}
});
});
if (response && response.har) {
har = response.har;
break;
} else {
console.error('Received response without HAR data');
}
} catch (error) {
retries++;
if (retries === maxRetries) {
throw error;
}
}
}
if (har) {
const entry = har.entries.find(e =>
e._initiator.url === details.initiator &&
e.request.url === details.url
);
if (entry?.response?.content?.text) {
requestHistory.set(details.requestId, {
url: details.url,
response: entry.response.content.text.substring(0, 102400), // 限制100KB
cookies: parseCookies(details.responseHeaders)
});
cleanupHistory();
}
}
} catch (error) {
console.error('Tracking error:', error.message);
}
},
{ urls: ["<all_urls>"] },
["responseHeaders"]
);
function parseCookies(headers) {
return headers
?.filter(h => h.name.toLowerCase() === 'set-cookie')
.map(h => h.value.split(';')[0]) || [];
}
function cleanupHistory() {
if (requestHistory.size > MAX_HISTORY) {
Array.from(requestHistory.keys())
.slice(0, requestHistory.size - MAX_HISTORY)
.forEach(k => requestHistory.delete(k));
}
}
chrome.webRequest.onBeforeRequest.addListener(
(details) => {
if (!isPluginEnabled ||!details.requestBody) return;
const params = parseParameters(details);
const sources = traceParameters(params, details.url);
chrome.runtime.sendMessage({
type: 'PARAM_DATA',
parameters: sources
});
},
{ urls: ["<all_urls>"] },
["requestBody"]
);
function parseParameters(details) {
if (details.requestBody.formData) {
return Object.entries(details.requestBody.formData)
.reduce((acc, [key, values]) => {
acc[key] = values[0];
return acc;
}, {});
}
if (details.requestBody.raw) {
const rawData = details.requestBody.raw[0].bytes;
try {
return JSON.parse(String.fromCharCode.apply(null, new Uint8Array(rawData)));
} catch (error) {
console.error('JSON解析错误:', error);
return {};
}
}
return {};
}
function traceParameters(params, currentUrl) {
const results = [];
// 检查历史响应
requestHistory.forEach((history, id) => {
Object.entries(params).forEach(([key, value]) => {
if (history.response.includes(value)) {
results.push({
name: key,
value: value,
source: 'previous',
originUrl: history.url
});
}
});
});
// 检查Cookies
chrome.cookies.getAll({ url: currentUrl }, (cookies) => {
cookies.forEach(cookie => {
if (params[cookie.name]) {
results.push({
name: cookie.name,
value: cookie.value,
source: 'cookie'
});
}
});
});
return results;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。