Browserify'd version of ajax-interceptor
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/11365/65323/Library%20for%20intercepting%20AJAX%20communications.js
// ==UserScript==
// @name Library for intercepting AJAX communications
// @version 1.0
// @author slorber (sauce: https://github.com/slorber/ajax-interceptor)
// @description Browserify'd version of ajax-interceptor
// @namespace MrHat.Torn
// ==/UserScript==
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"ajax-intercept":[function(require,module,exports){
'use strict';
var COMPLETED_READY_STATE = 4;
var RealXHRSend = XMLHttpRequest.prototype.send;
var requestCallbacks = [];
var responseCallbacks = [];
var wired = false;
function arrayRemove(array,item) {
var index = array.indexOf(item);
if (index > -1) {
array.splice(index, 1);
} else {
throw new Error("Could not remove " + item + " from array");
}
}
function fireCallbacks(callbacks,xhr) {
for( var i = 0; i < callbacks.length; i++ ) {
callbacks[i](xhr);
}
}
exports.addRequestCallback = function(callback) {
requestCallbacks.push(callback);
};
exports.removeRequestCallback = function(callback) {
arrayRemove(requestCallbacks,callback);
};
exports.addResponseCallback = function(callback) {
responseCallbacks.push(callback);
};
exports.removeResponseCallback = function(callback) {
arrayRemove(responseCallbacks,callback);
};
function fireResponseCallbacksIfCompleted(xhr) {
if( xhr.readyState === COMPLETED_READY_STATE ) {
fireCallbacks(responseCallbacks,xhr);
}
}
function proxifyOnReadyStateChange(xhr) {
var realOnReadyStateChange = xhr.onreadystatechange;
if ( realOnReadyStateChange ) {
xhr.onreadystatechange = function() {
fireResponseCallbacksIfCompleted(xhr);
realOnReadyStateChange();
};
}
}
exports.wire = function() {
if ( wired ) throw new Error("Ajax interceptor already wired");
// Override send method of all XHR requests
XMLHttpRequest.prototype.send = function() {
// Fire request callbacks before sending the request
fireCallbacks(requestCallbacks,this);
// Wire response callbacks
if( this.addEventListener ) {
var self = this;
this.addEventListener("readystatechange", function() {
fireResponseCallbacksIfCompleted(self);
}, false);
}
else {
proxifyOnReadyStateChange(this);
}
RealXHRSend.apply(this, arguments);
};
wired = true;
};
exports.unwire = function() {
if ( !wired ) throw new Error("Ajax interceptor not currently wired");
XMLHttpRequest.prototype.send = RealXHRSend;
wired = false;
};
},{}]},{},[]);