您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
AJAX plugin by Ivan Skvortsov
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/31953/209659/AJAX%20plugin%20-%20SkIvLib.js
// ==UserScript== // @name AJAX plugin - SkIvLib // @description AJAX plugin by Ivan Skvortsov // @description:ru AJAX плагин от Ivan Skvortsov // @include *://* // @author Ivan Skvortsov // @version 1.1.3 // @grant none // ==/UserScript== (function(){ var clog = function(){}; if( !clog ) clog = console.log; var factory = [], queue = [], request_in_progress = false, queue_cleaned = true; var xhttpResponse = []; function addXHttpResponse( responseText ) { if( typeof responseText !== 'string' ) return xhttpResponse.push({invalid: true}); xhttpResponse.push({ invalid: false, text: responseText, get bytes(){ return this.text.length; }, get Kb(){ return this.bytes/1024; }, get Mb(){ return this.bytes/(1024 * 1024); }, }); } function queueStatus() { return "queueStatus:\n" + "queue.length = " + queue.length + "\n" + "in_progress = " + request_in_progress + "\n" + "cleaned = " + queue_cleaned + "\n" + "--------------"; } function requestStatus( request ) { return "requestStatus:\n" + "method = " + request.method + "\n" + "url = " + request.url + "\n" + "async = " + request.async + "\n" + "data = " + request.data + "\n" + //"onload = " + request.onload + "\n" + "--------------"; } function createNewObject( obj ) { if( !obj ) return {}; var new_obj = {}, key, val; for( key in obj ) { val = obj[key]; if( Object.prototype.hasOwnProperty.call(obj, key) && val ) new_obj[key] = val; } return new_obj; } function initXHttpFactory() { if( factory && factory.length > 0 ) return; clog( "initXHttpFactory"); factory = [ function(){ return new XMLHttpRequest();}, function(){ return new ActiveXObject('Msxml3.XMLHTTP');}, function(){ return new ActiveXObject('Msxml2.XMLHTTP.6.0');}, function(){ return new ActiveXObject('Msxml2.XMLHTTP.3.0');}, function(){ return new ActiveXObject('Msxml2.XMLHTTP');}, function(){ return new ActiveXObject('Microsoft.XMLHTTP');}, ]; } function createXHttp() { clog("createXHttp"); initXHttpFactory(); for( let i = 0; i < factory.length; ++i ) { try{ return factory[i](); }catch(error){} } console.error("[createXHttp] can't create xhttp object"); return null; } function getXHttpRequest() { clog("getXHttpRequest : queue.length = " + queue.length); if( !(queue.length > 0) ) return null; var request = queue[0]; request.method = request.method || 'GET'; if( request.method.toUpperCase() === 'GET' && request.data && request.data !== '' ) { request.url += '?' + request.data; request.data = ''; } request.async = (typeof request.async !== 'boolean' ? true : request.async ); request.store = (typeof request.store !== 'boolean' ? false: request.store ); clog( requestStatus(request) ); return request; } function handleXHttpEvent( type, xhttp, request, event ) { clog("handleXHttpEvent : url=" + request.url + ", type=" + type + ", readyState=" + xhttp.readyState + ", status=" + xhttp.status ); var context, response; if( request[type] ) { response = xhttp; response.lengthComputable = xhttp.lengthComputable || event.lengthComputable || false; response.loaded = xhttp.loaded || event.loaded || 0; response.total = xhttp.total || event.total || 0; response.url = xhttp.responseURL || request.url; context = request.context || response; request[type].call( context, response.responseText ); if( type === 'onerror' || type === 'onload' || (type === 'onreadystatechange' && response.readyState == 4 && response.status == 200 && !request.onload ) ) { addXHttpResponse( (request.store ? response.responseText : undefined) ); request_in_progress = false; request.delay = request.delay > 20 ? request.delay : 20; setTimeout( XHttpRequest, request.delay ); } } } function initXHttpEvents( xhttp, request ) { var types = [ 'onabort', 'onerror', 'onload', 'onloadend', 'onloadstart', 'onprogress', 'onreadystatechange', 'ontimeout', ]; function addXHttpEventListener(type){ if( request[type] ) xhttp[type] = function XHttpEvents(event){handleXHttpEvent(type, xhttp, request, event);}; } types.forEach( addXHttpEventListener ); clog("initXHttpEvents: ", xhttp); } function initXHttp( xhttp, request ) { initXHttpEvents( xhttp, request ); for( let key in request.headers ) { xhttp.setRequestHeader( key, request.headers[key] ); } } function XHttpRequest() { var request, xhttp; request = getXHttpRequest(); if( request && (request_in_progress === false || request.async === true) && queue.length > 0 ) { clog("XHttpRequest"); queue.shift(); request_in_progress = true; xhttp = createXHttp(); initXHttp( xhttp, request ); clog("XHttpRequest : url=" + request.url + ", readyState=" + xhttp.readyState + ", status=" + xhttp.status ); xhttp.open( request.method, request.url, request.async ); xhttp.send( request.data || null ); } } function addXHttpRequest( ...args ) { var request, url, settings; switch( args.length ) { case 0: return; case 1: request = args[0]; clog("request: ", request); if( request.length ) request.forEach( function(req){ queue.push(req);} ); else queue.push(request); break; case 2: url = args[0]; settings = args[1]; clog("request: url=" + url + ", settings: ", settings); if( url.length ) url.forEach( function(u){queue.push(constructXHttpRequest(u, settings));}); else queue.push( constructXHttpRequest(url, settings) ); break; default: return; } queue_cleaned = false; } function constructXHttpRequest( url, settings ) { var request = createNewObject(settings); request.url = url; return request; } function cleanXHttpQueue() { xhttpResponse.length = 0; queue.length = 0; request_in_progress = false; queue_cleaned = true; } function queueLength() { return queue.length; } function getXHttpResponse(index) { if( !index || index < 0 ) return xhttpResponse; else if( xhttpResponse.length > 0 ) return xhttpResponse[index]; else return {text: '', invalid: true, bytes:0, Kb: 0, Mb: 0}; } window.SkIvLib = window.SkIvLib || {}; // AJAX API SkIvLib.ajaxResponse = getXHttpResponse; SkIvLib.ajaxClean = cleanXHttpQueue; SkIvLib.ajaxLength = queueLength; SkIvLib.ajaxStatus = queueStatus; SkIvLib.ajaxAddXHR = addXHttpRequest; SkIvLib.ajax = function(...args) { xhttpResponse.length = 0; addXHttpRequest(...args); console.log("SkIvLib.ajax(): length = " + this.ajaxLength()); XHttpRequest(); }; })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址