// ==UserScript==
// @name 屏蔽自定义网址,定向到指定网址
// @namespace http://tampermonkey.net/
// @version 1.6
// @description 支持通配符的自定义网址重定向工具
// @author mryuyu
// @match *://*/*
// @grant GM_registerMenuCommand
// @grant GM_setValue
// @grant GM_getValue
// @license MIT
// @downloadURL https://update.greasyfork.icu/scripts/533334/%E5%B1%8F%E8%94%BD%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BD%91%E5%9D%80%2C%E5%AE%9A%E5%90%91%E5%88%B0%E6%8C%87%E5%AE%9A%E7%BD%91%E5%9D%80.user.js
// @updateURL https://update.greasyfork.icu/scripts/533334/%E5%B1%8F%E8%94%BD%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BD%91%E5%9D%80%2C%E5%AE%9A%E5%90%91%E5%88%B0%E6%8C%87%E5%AE%9A%E7%BD%91%E5%9D%80.meta.js
// ==/UserScript==
(function() {
'use strict';
// 配置存储键名
const STORAGE_KEY = 'redirectRules';
// 初始化/读取规则
let redirectRules = GM_getValue(STORAGE_KEY, [
{
source: "*.twitter.com/*",
target: "https://www.baidu.com"
},
{
source: "youtube.com/shorts*",
target: "https://youtube.com/watch?v=$1"
}
]);
// 注册管理菜单
GM_registerMenuCommand("🔧 管理重定向规则", showRuleEditor);
/* 规则编辑器界面 */
function showRuleEditor() {
const editorHTML = `
重定向规则编辑器
${generateRulesHTML()}
通配符说明:
• 使用 * 匹配任意字符
• 使用 $1/$2 引用捕获组
示例:
source: "site.com/old/*" → target: "site.com/new/$1"
`;
const win = window.open('', '_blank', 'width=600,height=500');
win.document.write(editorHTML);
// 动态函数绑定
win.addNewRule = () => {
redirectRules.push({ source: '', target: '' });
win.document.getElementById('rulesList').innerHTML = generateRulesHTML();
};
win.saveRules = () => {
const inputs = win.document.querySelectorAll('.rule-item');
redirectRules = Array.from(inputs).map(input => ({
source: input.querySelector('.source').value.trim(),
target: input.querySelector('.target').value.trim()
})).filter(rule => rule.source && rule.target);
GM_setValue(STORAGE_KEY, redirectRules);
win.close();
window.location.reload();
};
}
/* 生成规则输入HTML */
function generateRulesHTML() {
return redirectRules.map((rule, index) => `
`).join('');
}
/* 执行重定向逻辑 */
function processRedirect() {
const currentURL = window.location.href;
for (const rule of redirectRules) {
// 转换通配符为正则表达式
const regexSource = rule.source
.replace(/\./g, '\\.')
.replace(/\*/g, '(.*)')
.replace(/\?/g, '\\?');
const regex = new RegExp(`^https?://${regexSource}(/.*)?$`, 'i');
// 执行匹配
const match = currentURL.match(regex);
if (match) {
// 构建目标URL(支持$1参数替换)
let targetURL = rule.target;
match.slice(1).forEach((group, index) => {
targetURL = targetURL.replace(`$${index + 1}`, group);
});
// 防止循环重定向
if (targetURL !== currentURL) {
window.location.replace(targetURL);
return true; // 已重定向
}
}
}
return false;
}
// 页面加载时触发检查
setTimeout(processRedirect, 100); // 延迟确保DOM加载完成
})();