您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
it can hook all ajax
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greatest.deepsurf.us/scripts/372706/932793/Hook%20all%20ajax.js
// ==UserScript== // @name Hook all ajax // @namespace https://gitee.com/HGJing/everthing-hook/ // @version 0.1.018 // @description it can hook all ajax // @include * // @require https://greatest.deepsurf.us/scripts/372672-everything-hook/code/Everything-Hook.js?version=632910 // @author Cangshi // @match *://*/* // @run-at document-start // @grant none // ==/UserScript== (function (global) { 'use strict'; if (global.eHook) { global.eHook.plugins({ name: 'NetHook', /** * 插件装载 * @param util */ mount: function (util) { var cbObject = { resp: {}, parseScript: function (m, args) { if (args[0].localName !== 'script') { return; } var src = decodeURI(args[0].src); var isPass = true; if (ajaxObject.filterPatten) { isPass = util.urlUtils.urlMatching(src, ajaxObject.filterPatten); } if (!isPass || !ajaxChange.cb.req) { return; } args[0].requestParams = util.urlUtils.getParamFromUrl(src); args[0].requestUrl = util.urlUtils.getUrlWithoutParam(src); ajaxChange.cb.req.call(this, args[0], util); var aimedUrl = util.urlUtils.margeUrlAndParams(args[0].requestUrl, args[0].requestParams); if (aimedUrl !== src) { args[0].src = aimedUrl; } var cbName = undefined; args[0].requestParams.map(function (kv) { if (kv.key.toLowerCase() === 'cb' || kv.key.toLowerCase() === 'callback') { cbName = kv.value; } }); if (!cbName || !ajaxChange.cb.resp) { return; } if (window[cbName]) { global.eHook.removeHookMethod(window, cbName); global.eHook.hookBefore(window, cbName, function (m, args) { ajaxChange.cb.resp.call(window, args, util); // console.log('Hooking call back: ' + cbName + ' success.') }, false); } else { var isDelete = false; try { isDelete = delete window[cbName] } catch (e) { isDelete = false; } if (isDelete) { Object.defineProperty(window, cbName, { set: function (v) { global.eHook.unHook(cbObject.resp, cbName, true); cbObject.resp[cbName] = v; global.eHook.hookBefore(cbObject.resp, cbName, function (m, args) { ajaxChange.cb.resp.call(this, args, util); }); }, get: function () { return cbObject.resp[cbName]; } }); console.log('Hooking(proxy) call back: ' + cbName + ' success.') } else { console.log('Hooking call back: ' + cbName + ' failed.') } } } }; var isAutoInit = localStorage.getItem('__hook_all_auto_init'); if (!isAutoInit) { localStorage.setItem('__hook_all_auto_init', JSON.stringify(true)); isAutoInit = localStorage.getItem('__hook_all_auto_init'); } var ajaxObject = { filterPatten: '', isAutoInit: isAutoInit && isAutoInit !== 'false' }; var ajaxChange = { filter: function (pattern) { ajaxObject.filterPatten = pattern; return this; }, ajax: { req: undefined, resp: undefined, send: undefined }, cb: { req: undefined, resp: undefined }, setting: { autoInit: function (b) { ajaxObject.isAutoInit = b; localStorage.setItem('__hook_all_auto_init', JSON.stringify(b)); } }, init: function () { // hook jsonp global.eHook.hookBefore(Node.prototype, 'appendChild', function (m, args) { cbObject.parseScript(m, args); }, false); global.eHook.hookBefore(Node.prototype, 'insertBefore', function (m, args) { cbObject.parseScript(m, args); }, false); global.aHook.register('.*', { hookResponse: function () { var isPass = true; if (ajaxObject.filterPatten) { isPass = util.urlUtils.urlMatching(this.responseURL, ajaxObject.filterPatten); } return !isPass ? undefined : ajaxChange.ajax.resp && ajaxChange.ajax.resp.call(this, arguments, util); }, hookSend: function (args) { var isPass = true; if (ajaxObject.filterPatten) { isPass = util.urlUtils.urlMatching(this.requestURL, ajaxObject.filterPatten); } return !isPass ? undefined : ajaxChange.ajax.send && ajaxChange.ajax.send.call(this, arguments, util); }, hookRequest: function (args) { window.util = util; var isPass = true; if (ajaxObject.filterPatten) { isPass = util.urlUtils.urlMatching(args.fullUrl, ajaxObject.filterPatten); } this.requestURL = args.fullUrl; return !isPass ? undefined : ajaxChange.ajax.req && ajaxChange.ajax.req.call(this, arguments, util); } } ); }, onInit: function () { } }; ajaxChange.onInit(); if (ajaxObject.isAutoInit) { ajaxChange.init(); } return ajaxChange; } }); } })(window);