Greasy Fork is available in English.

Redirigir HTTP a HTTPS

Redirección automática de HTTP a HTTPS

// ==UserScript==
// @name         HTTP重定向至HTTPS
// @name:en      Redirect HTTP to HTTPS
// @name:zh-CN   HTTP重定向至HTTPS
// @name:zh-HK   HTTP重定向至HTTPS
// @name:zh-MO   HTTP重定向至HTTPS
// @name:zh-TW   HTTP重定向至HTTPS
// @name:zh-SG   HTTP重定向至HTTPS
// @name:de      HTTP auf HTTPS umleiten
// @name:es      Redirigir HTTP a HTTPS
// @name:fr      Rediriger HTTP vers HTTPS
// @name:hi      HTTP को HTTPS पर पुनर्निर्देशित करें
// @name:ja      HTTPをHTTPSにリダイレクト
// @name:ko      HTTP를 HTTPS로 리디렉션
// @name:ru      Перенаправить HTTP на HTTPS
// @name:uk      Перенаправити HTTP на HTTPS
// @name:hi-IN   पुनःनिर्देशित करें HTTP से HTTPS पर
// @name:ko-KR   HTTP를 HTTPS로 리디렉션합니다
// @name:ru-RU   Перенаправить HTTP на HTTPS
// @name:uk-UA   Перенаправити HTTP на HTTPS
// @namespace    https://t.me/T8rAP
// @version      1.0
// @description  自动将HTTP重定向为HTTPS
// @description:en Automatically redirect HTTP to HTTPS
// @description:zh-CN 自动将HTTP重定向为HTTPS
// @description:zh-HK 自动将HTTP重定向为HTTPS
// @description:zh-MO 自动将HTTP重定向为HTTPS
// @description:zh-TW 自动将HTTP重定向为HTTPS
// @description:zh-SG 自动将HTTP重定向为HTTPS
// @description:de Automatische Umleitung von HTTP zu HTTPS
// @description:es Redirección automática de HTTP a HTTPS
// @description:fr Redirection automatique de HTTP vers HTTPS
// @description:hi HTTP को HTTPS पर स्वचालित रूप से पुनर्निर्देशित करें
// @description:ja HTTPをHTTPSに自動的にリダイレクトします
// @description:ko HTTP를 HTTPS로 자동 리디렉션합니다
// @description:ru Автоматическое перенаправление HTTP на HTTPS
// @description:uk Автоматичне перенаправлення HTTP на HTTPS
// @description:hi-IN सुरक्षा और प्रदर्शन के लिए HTTP को HTTPS पर स्वचालित रूप से पुनर्निर्देशित करें
// @description:ko-KR 보안 및 성능을 위해 HTTPS로 자동 리디렉션합니다
// @description:ru-RU Автоматическое перенаправление HTTP на HTTPS
// @description:uk-UA Автоматичне перенаправлення HTTP на HTTPS
// @author       DreamProStudio
// @match        *://*/*
// @license      GPL-3.0-or-later
// @grant        GM_registerMenuCommand
// @run-at       document-start
// @homepageURL  http://www.coolapk.com/u/28432077
// @supportURL   https://greasyfork.org/zh-CN/users/1257285-dreamprostudio
// ==/UserScript==

(function () {
    'use strict';

    const cacheName = 'httpsSupportCache';
    const defaultCacheTime = 1; // 默认缓存时间为1天(24小时)

    // 从本地存储加载缓存
    let cache = JSON.parse(localStorage.getItem(cacheName)) || {};

    // 更新缓存的辅助函数
    const updateCache = (host, supportsHttps) => {
        cache[host] = {
            supportsHttps,
            timestamp: Date.now()
        };
        localStorage.setItem(cacheName, JSON.stringify(cache));
    };

    // 检查当前协议是否为HTTP
    if (window.location.protocol === 'http:') {
        const host = window.location.hostname;

        // 先检查缓存
        if (cache[host] && cache[host].supportsHttps) {
            window.location.replace('https:' + window.location.href.substring(5));
        } else {
            // 构造HTTPS版本的URL
            const httpsURL = 'https:' + window.location.href.substring(5);

            // 检查HTTPS版本是否可访问
            fetch(httpsURL, { method: 'HEAD', mode: 'no-cors' })
                .then(response => {
                    if (response.ok || response.type === 'opaque') {
                        updateCache(host, true);
                        window.location.replace(httpsURL);
                    } else {
                        updateCache(host, false);
                    }
                })
                .catch(error => {
                    updateCache(host, false);
                });
        }
    }

    // 多语言支持
    const lang = navigator.language || navigator.userLanguage;
    const menuTexts = {
        'en': 'Clear HTTPS Cache',
        'zh-CN': '清除HTTPS缓存',
        'zh-HK': '清除HTTPS快取',
        'zh-MO': '清除HTTPS快取',
        'zh-TW': '清除HTTPS快取',
        'zh-SG': '清除HTTPS缓存',
        'de': 'HTTPS-Cache leeren',
        'es': 'Borrar caché HTTPS',
        'fr': 'Vider le cache HTTPS',
        'hi': 'HTTPS कैश साफ़ करें',
        'ja': 'HTTPSキャッシュをクリア',
        'ko': 'HTTPS 캐시 지우기',
        'ru': 'Очистить кэш HTTPS',
        'uk': 'Очистити кеш HTTPS',
        'hi-IN': 'सुरक्षा और प्रदर्शन के लिए HTTPS कैश साफ़ करें',
        'ko-KR': '보안 및 성능을 위해 HTTPS 캐시 지우기',
        'ru-RU': 'Очистить кэш HTTPS',
        'uk-UA': 'Очистити кеш HTTPS'
    };
    const clearCacheText = menuTexts[lang] || menuTexts['en']; // 默认语言为英文

    // 注册菜单选项的辅助函数
    const registerMenuCommands = () => {
        GM_registerMenuCommand(clearCacheText, () => {
            localStorage.removeItem(cacheName);
            cache = {}; // 清空内存中的缓存
            alert(clearCacheText + ' 已清除');
        });

        // 注释说明:菜单项“清除HTTPS缓存”用于清空HTTPS支持缓存
    };

    // 初始注册菜单选项
    registerMenuCommands();
})();