您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Browserify'd version of ajax-interceptor
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://updategreasyfork.deno.dev/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; }; },{}]},{},[]);