rubinTime 发表于 2022-2-19 12:18:52

因为这样可以形成对某一个xhr进行劫持,如果设置到原型链上相当于对所有的xhr进行了一次劫持,如果你的劫持get内有大量的回调代码会严重拖慢运行的速度

感觉劫持xhr没有劫持原型也是对全体xhr的劫持,重写了open方法之后,每个xhr实例访问response属性都会被劫持啊

rubinTime 发表于 2022-2-19 12:25:12

rubinTime 发表于 2022-2-19 12:18
因为这样可以形成对某一个xhr进行劫持,如果设置到原型链上相当于对所有的xhr进行了一次劫持,如果你的劫持 ...

哦我知道了,没问题,进入里面是有条件,需要url满足自己的需求才会被劫持

李恒道 发表于 2022-2-19 12:47:02

rubinTime 发表于 2022-2-19 12:25
哦我知道了,没问题,进入里面是有条件,需要url满足自己的需求才会被劫持 ...

没事的,即使全部劫持了,也不会有任何影响
现在计算机性能非常高的
包括tampermonkey也会遍历对特定属性处理
vue也会对所有data做definepropety做依赖收集,数组也会全部做hook
只要不集中做大量,密集,耗时的运算
这点性能耗费很低的,0.001ms都跑不上

cxxjackie 发表于 2022-2-21 19:50:03

第一段代码里的response和responseText统一一下吧,我看到不止一个人抄这段代码前后不一致了,还是注意一下比较好。

李恒道 发表于 2022-2-21 22:06:04

cxxjackie 发表于 2022-2-21 19:50
第一段代码里的response和responseText统一一下吧,我看到不止一个人抄这段代码前后不一致了,还是注意一下 ...

已经修正完毕了,哥哥
最近在筹划专门建一个教程站,重新整理一下教程
竟然还有人抄教程源码,莫名有点感动
我一直以为超过30章之后就根本没人看了

Kished 发表于 2022-10-7 10:33:08

感谢!已经用这个方法跳过登录验证了。
通宵糊的代码:https://github.com/Eished/jkforum_helper/blob/main/src/lib/hackLogin.ts

Major 发表于 2022-12-31 12:10:23

请问是直接这样写吗,发现捕获不到啊,可以给个完整点的参考例子吗,急需。感谢!!!


// ==UserScript==
// @name         劫持并修改
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1.0
// @descriptiontry to take over the world!
// @author       You
// @match      {{match}}
// @match      http*://*/show?id*
// @run-at       document-start
// ==/UserScript==


(function() {

    const xhrOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function() {
      let url = '/api/show'
      if (arguments == url) {
      const xhr = this;
      const getter = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, 'response').get;
      Object.defineProperty(xhr, 'response', {
            get: () => {
            let result = getter.call(xhr);
            console.log(result)
            //这里可以修改result
            return result;
            }
      });
      }
      return xhrOpen.apply(xhr, arguments);
    };
})();

cxxjackie 发表于 2022-12-31 12:26:13

Major 发表于 2022-12-31 12:10
请问是直接这样写吗,发现捕获不到啊,可以给个完整点的参考例子吗,急需。感谢!!!

...

不一定是response,也可能是responseText,要根据代码读取的情况劫持对应属性。可以试试这个:https://bbs.tampermonkey.net.cn/thread-3284-1-1.html

Major 发表于 2022-12-31 13:06:10

cxxjackie 发表于 2022-12-31 12:26
不一定是response,也可能是responseText,要根据代码读取的情况劫持对应属性。可以试试这个:https://bb ...

捕获json数据怎么写

cxxjackie 发表于 2022-12-31 19:54:06

Major 发表于 2022-12-31 13:06
捕获json数据怎么写

原响应是json,且responseType设置为json,才能捕获到json对象,否则就是json字符串,需要自己做转换:
ajaxHooker.hook(request => {
    if (request.url === 'https://www.example.com/') {
      request.response = res => {
            const json = JSON.parse(res.responseText);
            json.test = 'hello';
            res.responseText = JSON.stringify(json);
      };
    }
});
页: 1 [2] 3 4
查看完整版本: [油猴脚本开发指南]XHR劫持的第二种格式