您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
it can hook all ajax
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/372706/632991/Hook%20all%20ajax.js
- // ==UserScript==
- // @name Hook all ajax
- // @namespace https://gitee.com/HGJing/everthing-hook/
- // @version 0.1.001
- // @description it can hook all ajax
- // @include *
- // @require https://greasyfork.org/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') {
- var src = decodeURI(args[0].src);
- var isPass = true;
- if (ajaxObject.filterPatten) {
- isPass = util.urlUtils.urlMatching(src, ajaxObject.filterPatten);
- }
- if (!isPass) {
- 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 = 'cb';
- args[0].requestParams.map(function (kv) {
- if (kv.key.toLowerCase() === 'cb' || kv.key.toLowerCase() === 'callback') {
- cbName = kv.value;
- }
- });
- 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 ajaxObject = {
- filterPatten: ''
- };
- var ajaxChange = {
- filter: function (pattern) {
- ajaxObject.filterPatten = pattern;
- return this;
- },
- ajax: {
- req: function () {
- },
- resp: function () {
- },
- send: function () {
- }
- },
- cb: {
- req: function () {
- },
- resp: 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.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.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.call(this, arguments, util);
- }
- }
- );
- return ajaxChange;
- }
- });
- }
- })(window);