SCYS Content Modifier

修改API响应状态码和Token处理

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         SCYS Content Modifier
// @namespace    http://scys.com/
// @version      2.6
// @description  修改API响应状态码和Token处理
// @author       You
// @match        *://*.scys.com/*
// @grant        GM_xmlhttpRequest
// @connect      scys.com
// @run-at       document-start
// ==/UserScript==
// @license MIT

(function() {
    'use strict';

    const TARGET_APIS = [
        '/shengcai-web/client/fxb/listFxbSecondLabel',
        '/shengcai-web/client/fxb/listFxbZbUser',
        '/shengcai-web/client/fxb/listExhSecondLabel'
    ];

    const TOKEN_KEY = '__user_token.v3';

    function debug(msg) {
        console.log('[SCYS Debug]:', msg);
    }

    // 保持登录状态
    function maintainLogin() {
        const fakeToken = {
            token: 'fake_token_' + Date.now(),
            expires: Date.now() + 86400000
        };

        try {
            localStorage.setItem(TOKEN_KEY, JSON.stringify(fakeToken));
        } catch (e) {
            debug('保存token失败: ' + e.message);
        }

        // 定期检查token
        setInterval(() => {
            if (!localStorage.getItem(TOKEN_KEY)) {
                localStorage.setItem(TOKEN_KEY, JSON.stringify(fakeToken));
                debug('恢复token');
            }
        }, 1000);
    }

    // 拦截Promise.reject
    const originalReject = Promise.reject;
    Promise.reject = function(reason) {
        if (reason && reason.status === 401) {
            debug('拦截401 Promise.reject');
            return Promise.resolve({
                data: {
                    status: 200,
                    success: true,
                    message: "操作成功",
                    data: {}
                }
            });
        }
        return originalReject.call(this, reason);
    };

    // 拦截axios实例
    function interceptAxios() {
        const checkAndIntercept = () => {
            if (window._d) {
                debug('找到axios实例');

                // 拦截请求配置
                if (window._d.interceptors && window._d.interceptors.request) {
                    window._d.interceptors.request.use(
                        config => {
                            debug('拦截请求配置');
                            if (config.url && TARGET_APIS.some(api => config.url.includes(api))) {
                                config.validateStatus = function() {
                                    return true;
                                };
                            }
                            return config;
                        },
                        error => {
                            return Promise.reject(error);
                        }
                    );
                }

                // 拦截响应
                if (window._d.interceptors && window._d.interceptors.response) {
                    window._d.interceptors.response.use(
                        response => {
                            if (response.config && TARGET_APIS.some(api => response.config.url.includes(api))) {
                                debug('修改响应数据');
                                return {
                                    data: {
                                        status: 200,
                                        success: true,
                                        message: "操作成功",
                                        data: {}
                                    }
                                };
                            }
                            return response;
                        },
                        error => {
                            if (error.response && error.response.status === 401) {
                                debug('拦截401响应');
                                return Promise.resolve({
                                    data: {
                                        status: 200,
                                        success: true,
                                        message: "操作成功",
                                        data: {}
                                    }
                                });
                            }
                            return Promise.reject(error);
                        }
                    );
                }
            } else {
                setTimeout(checkAndIntercept, 100);
            }
        };

        checkAndIntercept();
    }

    // 拦截跳转
    function interceptRedirects() {
        // 拦截 setTimeout
        const originalSetTimeout = window.setTimeout;
        window.setTimeout = function(fn, delay) {
            if (typeof fn === 'string') {
                if (fn.includes('location') || fn.includes('/login') || fn.includes('/clean')) {
                    debug('阻止setTimeout中的跳转代码');
                    return;
                }
            } else if (typeof fn === 'function') {
                const wrappedFn = function() {
                    try {
                        fn.apply(this, arguments);
                    } catch (e) {
                        if (e.toString().includes('location')) {
                            debug('阻止setTimeout中的跳转');
                        } else {
                            throw e;
                        }
                    }
                };
                return originalSetTimeout.call(this, wrappedFn, delay);
            }
            return originalSetTimeout.apply(this, arguments);
        };

        // 拦截 history API
        const originalPushState = history.pushState;
        history.pushState = function() {
            if (arguments[2] && (arguments[2].includes('/login') || arguments[2].includes('/clean'))) {
                debug('阻止pushState跳转到: ' + arguments[2]);
                return;
            }
            return originalPushState.apply(this, arguments);
        };
    }

    // 初始化
    function init() {
        try {
            maintainLogin();
            interceptAxios();
            interceptRedirects();
            debug('脚本初始化完成');
        } catch (e) {
            debug('初始化失败: ' + e.message);
        }
    }

    // 确保最早执行
    init();

    // 监听页面加载完成
    window.addEventListener('load', () => {
        debug('页面加载完成,重新检查拦截');
        init();
    });
})();