Files
xget-now/background.js
T
xixu-me a1e258a4b8 Localize documentation and extension messages to Chinese
Converted all major documentation files (README, PRIVACY_POLICY, SECURITY, pull request template) to Chinese. Updated extension source files (background.js, content.js, popup.html, popup.js) to use Chinese comments and user-facing messages for improved localization and user experience.
2025-07-12 10:49:56 +08:00

152 lines
4.1 KiB
JavaScript

// 与 worker.js 匹配的平台配置
const PLATFORMS = {
gh: {
base: "https://github.com",
name: "GitHub",
transform: (path) => path.replace(/^\/gh\//, "/"),
pattern: /^https:\/\/github\.com\//,
},
gl: {
base: "https://gitlab.com",
name: "GitLab",
transform: (path) => path.replace(/^\/gl\//, "/"),
pattern: /^https:\/\/gitlab\.com\//,
},
hf: {
base: "https://huggingface.co",
name: "Hugging Face",
transform: (path) => path.replace(/^\/hf\//, "/"),
pattern: /^https:\/\/huggingface\.co\//,
},
};
// 默认设置
const DEFAULT_SETTINGS = {
enabled: true,
xgetDomain: "xget.xi-xu.me",
enabledPlatforms: {
gh: true,
gl: true,
hf: true,
},
};
// 初始化扩展
chrome.runtime.onInstalled.addListener(async () => {
console.log("Xget for Chrome 已安装");
// 如果尚未设置,则设置默认设置
const settings = await chrome.storage.sync.get(DEFAULT_SETTINGS);
await chrome.storage.sync.set(settings);
});
// 监听下载事件
chrome.downloads.onDeterminingFilename.addListener((downloadItem, suggest) => {
handleDownload(downloadItem, suggest);
});
async function handleDownload(downloadItem, suggest) {
try {
const settings = await chrome.storage.sync.get(DEFAULT_SETTINGS);
// 检查扩展是否已启用并配置了域名
if (!settings.enabled || !settings.xgetDomain) {
suggest();
return;
}
const url = downloadItem.url;
const redirectedUrl = transformUrl(url, settings);
if (redirectedUrl && redirectedUrl !== url) {
console.log("重定向下载:", url, "->", redirectedUrl);
// 取消原始下载
chrome.downloads.cancel(downloadItem.id);
// 使用重定向的 URL 开始新下载
chrome.downloads.download({
url: redirectedUrl,
filename: downloadItem.filename || undefined,
conflictAction: "uniquify",
});
// 通过内容脚本显示通知
try {
await chrome.tabs.sendMessage(downloadItem.tabId, {
action: "showNotification",
message: "下载已通过 Xget 重定向",
});
} catch (error) {
console.log("无法向标签页发送通知");
}
} else {
suggest();
}
} catch (error) {
console.error("处理下载时出错:", error);
suggest();
}
}
function transformUrl(url, settings) {
try {
// 找到匹配的平台
for (const [platformKey, platform] of Object.entries(PLATFORMS)) {
if (!settings.enabledPlatforms[platformKey]) continue;
if (platform.pattern.test(url)) {
const urlObj = new URL(url);
const path = urlObj.pathname + urlObj.search + urlObj.hash;
// 使用 Xget 域名转换 URL(添加 https:// 协议)
const xgetUrl = `https://${settings.xgetDomain}/${platformKey}${path}`;
return xgetUrl;
}
}
return null; // 不需要转换
} catch (error) {
console.error("转换 URL 时出错:", error);
return null;
}
}
// 监听来自弹出窗口/选项的消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === "getSettings") {
chrome.storage.sync.get(DEFAULT_SETTINGS).then(sendResponse);
return true;
} else if (request.action === "saveSettings") {
chrome.storage.sync.set(request.settings).then(async () => {
// 通知相关标签页刷新
try {
const tabs = await chrome.tabs.query({
url: [
"https://github.com/*",
"https://gitlab.com/*",
"https://huggingface.co/*",
],
});
for (const tab of tabs) {
try {
await chrome.tabs.sendMessage(tab.id, {
action: "showNotification",
message: "设置已更新!点击刷新页面",
showRefreshButton: true,
});
} catch (error) {
// 标签页可能没有加载内容脚本,忽略
}
}
} catch (error) {
console.log("无法通知标签页设置更新");
}
sendResponse({ success: true });
});
return true;
}
});