Major
发表于 2023-3-3 16:47:21
cxxjackie 发表于 2023-2-28 22:18
不加filter能否hook到?这个过滤是白名单机制,hook不到可能规则有问题,url是否写多了?有些请求url是相 ...
不加不加filter可以hook到数据,filter的URL 我试了完整的和不完整的都不行,你试的可以成功吗
Major
发表于 2023-3-3 20:16:30
我有一个按钮,点击按钮执行 hook 操作, hook完成后想释放 hook,使用 ajaxHooker.unhook(); 做释放操作。
问题是,当我再次点击按钮时候,怎样才能让 hook继续工作,hook完成后再次释放 hook。
只要我一直点击按钮,就一直循环,hook 和 释放hook。这样能不能实现
Major
发表于 2023-3-3 20:24:22
有没有可能给 hook 动态传参,每次hook 时,hook 内部的函数接收不同参数
cxxjackie
发表于 2023-3-3 20:57:06
Major 发表于 2023-3-3 16:47
不加不加filter可以hook到数据,filter的URL 我试了完整的和不完整的都不行,你试的可以成功吗 ...
你没给网址啊,只有一个请求链接,这个网站好像还要注册,我也不知道哪个页面,测试不了。
我自己用filter是没问题的,你这个会不会是重定向?看看request.url和res.finalUrl是否一致,过滤应以前者为准。
cxxjackie
发表于 2023-3-3 21:15:15
本帖最后由 cxxjackie 于 2023-3-5 22:37 编辑
Major 发表于 2023-3-3 20:24
有没有可能给 hook 动态传参,每次hook 时,hook 内部的函数接收不同参数
unhook不可逆,如果需要控制hook是否执行,可以在回调函数内加变量判断,传参这类需求也可以在外部实现:
const myRequest = {
isHook: true,
isInit: false,
args: [],
hook(...args) {
this.isHook = true;
this.args = args;
if (this.isInit) return;
ajaxHooker.hook(request => {
if (!this.isHook) return;
console.log(this.args);
});
this.isInit = true;
},
unhook() {
this.isHook = false;
}
};
BlenderB
发表于 2023-3-13 20:06:43
这个牛币,请问是可以做到,我点击按钮后,将原来xrh的get请求要查询的内容,换成我修改后的内容吗?
cxxjackie
发表于 2023-3-13 22:14:15
BlenderB 发表于 2023-3-13 20:06
这个牛币,请问是可以做到,我点击按钮后,将原来xrh的get请求要查询的内容,换成我修改后的内容吗?...
可以,参考修改响应数据的示例。
BlenderB
发表于 2023-3-14 17:10:57
cxxjackie 发表于 2023-3-13 22:14
可以,参考修改响应数据的示例。
好的好的,谢谢哥哥解答, 我感觉我又能行了{:4_94:}
cabin
发表于 2023-3-17 11:28:54
大佬,为啥我这么用filter直接把我所有的请求都给截断了
// ==UserScript==
// @name Xhotel
// @namespace pub.xhotel.xms
// @version 0.0.1
// @descriptiontry to take over the world
// @author Cabin
// @require https://scriptcat.org/lib/637/1.2.2/ajaxHooker.js
// @match http://devxms.xhotel.pub/*
// @icon http://xms.xhotel.pub/favicon.ico
// @run-at document-start
// @grant unsafeWindow
// @connect xms.xhotel.pub
// @connect devxms.xhotel.pub
// ==/UserScript==
(function () {
"use strict";
ajaxHooker.filter([
{type: 'xhr', url: '/plaManager/sysMenu/sysUserMenu', method: 'GET'},
]);
ajaxHooker.hook(async (request) => {
request.response = async (res) => {
console.log(res.responseText);
};
});
})();
cxxjackie
发表于 2023-3-17 21:24:52
cabin 发表于 2023-3-17 11:28
大佬,为啥我这么用filter直接把我所有的请求都给截断了
问题已确认,不是请求被截断,而是readystatechange事件没处理好,导致部分请求收不到响应,已于1.2.3修复。