您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
修改API响应状态码和Token处理
// ==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(); }); })();