URL Manager

支持 HTTP 到 HTTPS 和 HTTPS 到 HTTP 重定向,支持关键字替换功能

// ==UserScript==
// @name         URL Manager
// @namespace    https://space.bilibili.com/398910090
// @version      1.1
// @author       Ace
// @description  支持 HTTP 到 HTTPS 和 HTTPS 到 HTTP 重定向,支持关键字替换功能
// @match        *://*/*
// @grant        GM_registerMenuCommand
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==

(function() {
    'use strict';

    // 获取重定向站点列表
    let httpToHttpsSites = JSON.parse(GM_getValue("httpToHttpsSites", "[]"));
    let httpsToHttpSites = JSON.parse(GM_getValue("httpsToHttpSites", "[]"));
    let keywordReplacements = JSON.parse(GM_getValue("keywordReplacements", "{}"));

    // 添加菜单选项
    GM_registerMenuCommand("将当前网站添加到 HTTP 重定向规则", () => toggleSite(httpToHttpsSites, "httpToHttpsSites"));
    GM_registerMenuCommand("将当前网站添加到 HTTPS 重定向规则", () => toggleSite(httpsToHttpSites, "httpsToHttpSites"));
    GM_registerMenuCommand("添加/删除网址替换规则", manageKeywordReplacements);

    // 站点添加/删除功能
    function toggleSite(siteList, storageKey) {
        const site = window.location.hostname;
        const siteIndex = siteList.indexOf(site);
        const action = siteIndex === -1 ? "添加到" : "从";
        if (confirm(`确定要删除${action} ${site} 的规则吗?`)) {
            siteIndex === -1 ? siteList.push(site) : siteList.splice(siteIndex, 1);
            GM_setValue(storageKey, JSON.stringify(siteList));
            alert(`已${action === "添加到" ? "添加" : "删除"} ${site} 的规则。`);
        }
    }

    // 添加/删除网址替换规则
    function manageKeywordReplacements() {
        const url = window.location.hostname;
        const keyword = prompt("请输入要替换的网址关键字:");
        if (!keyword) return;
        const replacement = prompt(`将 ${keyword} 替换成什么内容:`);
        if (replacement === null) return;

        if (!keywordReplacements[url]) keywordReplacements[url] = [];
        keywordReplacements[url].push({ keyword, replacement });
        GM_setValue("keywordReplacements", JSON.stringify(keywordReplacements));
        alert(`已为 ${url} 设置替换规则:${keyword} -> ${replacement}`);
    }

    // 执行 HTTP 到 HTTPS 或 HTTPS 到 HTTP 重定向
    function performRedirect() {
        const protocol = window.location.protocol;
        const host = window.location.hostname;

        if (protocol === "http:" && httpToHttpsSites.includes(host)) {
            window.location.href = window.location.href.replace("http://", "https://");
        } else if (protocol === "https:" && httpsToHttpSites.includes(host)) {
            window.location.href = window.location.href.replace("https://", "http://");
        }
    }

    // 关键字替换功能
    function applyKeywordReplacements() {
        const url = window.location.href;
        const host = window.location.hostname;

        if (keywordReplacements[host]) {
            let newUrl = url;
            keywordReplacements[host].forEach(replacement => {
                newUrl = newUrl.replace(new RegExp(replacement.keyword, "g"), replacement.replacement);
            });

            if (newUrl !== url) window.location.href = newUrl;
        }
    }

    performRedirect();
    applyKeywordReplacements();
})();