Super Light AJAX plugin by IvanSkvortsov
Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.org/scripts/32009/209858/Super%20Light%20AJAX%20plugin.js
// ==UserScript==
// @name Super Light AJAX plugin
// @description Super Light AJAX plugin by IvanSkvortsov
// @description:ru Супер упрощенная версия AJAX плагина от IvanSkvortsov
// @include *://*
// @author IvanSkvortsov
// @date 2017.08.05
// @version 1.0.5
// @grant none
// ==/UserScript==
(function(){
var lqueue = [], lrequestInProgress = false, lqueueCleaned = true;
var activeXs = ['Msxml3.XMLHTTP', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP',];
var events = ['onabort', 'onerror', 'onload', 'onloadend', 'onloadstart', 'onprogress', 'onreadystatechange', 'ontimeout',];
function XHttpRequestLight(){
var request = lqueue[0], xhttp = null, i, key;
if(!( request && (lrequestInProgress === false || request.async === true) && lqueue.length > 0 ))
return;
// handle request:
request.method = request.method || 'GET';
if( request.method.toUpperCase() === 'GET' && request.data ){
request.url += '?' + request.data;
request.data = null;
}
request.async = typeof request.async === 'boolean' ? request.async : true;
// createXmlHttpRequest:
if( window.XMLHttpRequest )
xhttp = new XMLHttpRequest();
else if( window.ActiveXObject ){
for( i = 0; i < activeXs.length; ++i ){
try{xhttp = new ActiveXObject(activeXs[i]);}
catch(error){continue;}
break;
}
if( !xhttp ){
console.error("[XHttpRequestLight] can't create ActiveXObject");
return;
}
}else{
console.error("[XHttpRequestLight] can't create XmlHttpRequest object");
return;
}
xhttp.open( request.method, request.url, request.async );
lrequestInProgress = true;
lqueue.shift();
for( key in request.headers )
xhttp.setRequestHeader( key, request.headers[key] );
xhttp.url = request.url;
// handle XmlHttpRequest events
events.forEach(function(type){
if( request[type] ){
xhttp[type] = function(event){
xhttp.lengthComputable = event.lengthComputable || false;
xhttp.loaded = event.loaded || 0;
xhttp.total = event.total || 0;
request[type].call(xhttp, xhttp.responseText);
if( type === 'onerror' || type === 'onload' || (type === 'onreadystatechange' && xhttp.readyState == 4 && xhttp.status == 200 && !request.onload)){
lrequestInProgress = false;
request.delay = request.delay > 20 ? request.delay : 20;
setTimeout( XHttpRequestLight, request.delay );
}
};
}
});
xhttp.send( request.data || null);
}
function createNewRequest( url, settings )
{
var key, val, request = {};
for( key in settings )
{
val = settings[key];
if( Object.prototype.hasOwnProperty.call( settings, key ) && val )
request[key] = val;
}
request.url = url;
return request;
}
window.ISL = window.ISL || {};
// AJAX API
ISL.lajaxAddXHR = function(){
var request, url, settings;
switch(arguments.length){
case 0:
return;
case 1:
request = arguments[0];
if( request.length )
lqueue = lqueue.concat( request );
else
lqueue.push(request);
break;
case 2:
url = arguments[0];
settings = arguments[1];
if( url.length )
url.forEach(function(u){ lqueue.push(createNewRequest(u, settings));} );
else
lqueue.push(createNewRequest(url, settings));
break;
default:
console.error("[lajaxAddXHR] invalid number of arguments: " + arguments.length);
return;
}
lqueueCleaned = false;
};
ISL.lajax = function(){
ISL.lajaxAddXHR.apply(this, arguments);
XHttpRequestLight();
};
ISL.lajaxClean = function(){
lqueue.length = 0;
lrequestInProgress = false;
lqueueCleaned = true;
};
ISL.lajaxLength = function(){ return lqueue.length; };
})();