CR-NOQQ

CR-NOQQ 自动跳转QQ链接到目标域名

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         CR-NOQQ
// @namespace    github.com/jidan233awa
// @version      1.0
// @description  CR-NOQQ 自动跳转QQ链接到目标域名
// @author       CRWorld
// @match        https://c.pc.qq.com/ios.html*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 配置变量:0=显示动画弹窗,1=直接跳转
    const SKIP_ANIMATION = 0;
    //======↑↑↑配置变量↑↑↑==================================
    //=====================================================
    //=====================================================
    // 检查当前URL是否匹配目标模式
    const currentUrl = window.location.href;
    const urlParams = new URLSearchParams(window.location.search);
    const targetUrl = urlParams.get('url');

    if (targetUrl) {
        // 如果设置为直接跳转模式
        if (SKIP_ANIMATION === 1) {
            let cleanUrl = targetUrl;
            
            // 如果URL不包含协议,添加https://
            if (!cleanUrl.startsWith('http://') && !cleanUrl.startsWith('https://')) {
                cleanUrl = 'https://' + cleanUrl;
            }
            
            // 直接跳转到目标URL
            window.location.href = cleanUrl;
            return;
        }
        
        // 默认模式:显示动画弹窗
        // 创建弹窗容器
        const modal = document.createElement('div');
        modal.className = 'cr-modal';
        modal.style.cssText = `
            position: fixed !important;
            top: 20px !important;
            right: 20px !important;
            left: auto !important;
            width: 260px;
            height: 110px;
            background: linear-gradient(120deg, rgba(163, 187, 227, 0.18) 0%, rgba(189, 231, 250, 0.14) 100%);
            backdrop-filter: blur(15px);
            -webkit-backdrop-filter: blur(15px);
            border-radius: 16px;
            box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
            z-index: 10000;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            padding: 20px;
            font-family: Arial, sans-serif;
            color: #333;
            font-weight: 500;
            box-sizing: border-box;
            overflow: hidden;
            opacity: 0;
            transform: translateY(-20px) scale(0.95);
        `;

        // 添加动画样式
        const style = document.createElement('style');
        style.textContent = `
            .cr-modal {
                animation: modalShow 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
            }
            .cr-modal.hide {
                animation: modalHide 0.5s ease forwards;
            }
            @keyframes modalShow {
                to {
                    opacity: 1;
                    transform: translateY(0) scale(1);
                }
            }
            @keyframes modalHide {
                0% {
                    opacity: 1;
                    transform: scale(1);
                }
                100% {
                    opacity: 0;
                    transform: scale(0.9);
                }
            }
            .cr-modal::after {
                content: '';
                position: absolute;
                bottom: 0;
                left: 0;
                right: 0;
                height: 9px;
                background-color: #e8e8e8;
                border-radius: 0 0 16px 16px;
            }
            .cr-modal::before {
                content: '';
                position: absolute;
                bottom: 0;
                left: 0;
                height: 9px;
                background-color: #67c23a;
                border-radius: 0 0 16px 16px;
                z-index: 1;
                width: 100%;
                transform-origin: left;
                animation: progressShrink 3s linear forwards;
            }
            @keyframes progressShrink {
                from {
                    transform: scaleX(1);
                }
                to {
                    transform: scaleX(0);
                }
            }
            .tooltip-content {
                font-size: 18px;
                text-align: center;
                line-height: 1.4;
                color: #34495e;
                font-weight: 700;
            }
        `;
        document.head.appendChild(style);

        // 创建内容区域
        const contentArea = document.createElement('div');
        contentArea.className = 'tooltip-content';
        contentArea.innerHTML = `
            <span id="countdown">3</span> 秒后跳转
        `;

        // 组装弹窗
        modal.appendChild(contentArea);
        document.body.appendChild(modal);

        // 倒计时功能
        let countdown = 3;
        const countdownElement = modal.querySelector('#countdown');
        
        // 数字倒计时定时器(每秒更新)
        const numberTimer = setInterval(() => {
            countdown--;
            countdownElement.textContent = countdown;
            
            if (countdown <= 0) {
                clearInterval(numberTimer);
                // 倒计时结束后10ms延迟触发消失动画
                setTimeout(() => {
                    modal.classList.add('hide');
                    setTimeout(() => {
                        // 提取并跳转到目标域名
                        let cleanUrl = targetUrl;
                        
                        // 如果URL不包含协议,添加https://
                        if (!cleanUrl.startsWith('http://') && !cleanUrl.startsWith('https://')) {
                            cleanUrl = 'https://' + cleanUrl;
                        }
                        
                        // 跳转到目标URL
                        window.location.href = cleanUrl;
                    }, 500);
                }, 10);
            }
        }, 1000);
    }
})();