在城通网盘文件下载页面添加一个第三方解析按钮,方便快速下载。
// ==UserScript==
// @name 城通网盘第三方解析
// @namespace http://tampermonkey.net/
// @version 1.1
// @description 在城通网盘文件下载页面添加一个第三方解析按钮,方便快速下载。
// @author Gemini & kc0ed
// @license MIT
// @match https://*.ctfile.com/f/*
// @grant none
// @icon https://webapi.ctfile.com/assets/img/illustrations/logo.png
// ==/UserScript==
(function() {
'use strict';
// 第三方解析站点的基础URL
const thirdPartyBaseUrl = 'https://ctfile.qinlili.bid/';
/**
* 解析当前页面的URL,提取文件ID和访问密码
* @returns {object|null} 包含file和pass的对象,如果解析失败则返回null
*/
function parseCtfileUrl() {
const currentUrl = window.location.href;
// 正则表达式匹配 /f/之后到?之前的内容 (file) 和 p=之后的内容 (pass)
const regex = /\/f\/([^?]+)\?p=(\d+)/;
const matches = currentUrl.match(regex);
if (matches && matches.length === 3) {
return {
file: matches[1], // 文件ID
pass: matches[2] // 访问密码
};
}
console.warn('CTFile Helper: 未能从当前URL中解析出文件ID和密码。');
return null;
}
/**
* 创建并添加“第三方解析”按钮
*/
function addThirdPartyButton() {
// 定位到“举报”按钮的父容器,这是所有按钮的家
const buttonContainer = document.querySelector('a.btn.btn-warning.ml-3')?.parentElement;
if (!buttonContainer) {
console.warn('CTFile Helper: 未找到按钮容器,无法添加按钮。');
return;
}
// 检查按钮是否已经存在,防止重复添加
if (document.getElementById('third-party-parse-btn')) {
return;
}
const urlParts = parseCtfileUrl();
if (!urlParts) {
return;
}
// 构建第三方解析链接
const newUrl = `${thirdPartyBaseUrl}?file=${urlParts.file}&pass=${urlParts.pass}`;
// 创建新的按钮元素 (<a> 标签)
const newButton = document.createElement('a');
newButton.id = 'third-party-parse-btn'; // 添加ID以便识别
newButton.href = newUrl;
newButton.target = '_blank'; // 在新标签页打开
newButton.textContent = '第三方解析'; // 按钮显示的文字
// 设置样式,与旁边的按钮保持一致
// 'btn-primary' 是蓝色,您也可以换成 'btn-success'(绿色), 'btn-info'(青色) 等
newButton.className = 'btn btn-primary ml-3';
// 将新按钮添加到容器中
buttonContainer.appendChild(newButton);
console.log('CTFile Helper: “第三方解析”按钮已成功添加!');
}
// 由于城通网盘的页面元素可能是动态加载的,
// 我们使用一个定时器来轮询检查目标元素是否出现。
const checkInterval = setInterval(() => {
// 检查“举报”按钮是否存在,作为页面加载完成的标志
if (document.querySelector('a.btn.btn-warning.ml-3')) {
// 元素已出现,执行添加按钮的函数
addThirdPartyButton();
// 清除定时器,避免不必要的性能消耗
clearInterval(checkInterval);
}
}, 500); // 每500毫秒检查一次
})();