上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: 李恒道 - 

[油猴脚本开发指南]XHR劫持代码原理解释

[复制链接]
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5196

    回帖

    6078

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6078

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2021-7-19 16:44:15 | 显示全部楼层 | 阅读模式

    代码可以参考https://bbs.tampermonkey.net.cn/forum.php?mod=viewthread&tid=357&highlight=xmlhttp

    这是我之前在国外论坛找到的一个小栗子

    
    function addXMLRequestCallback(callback){
        是一个劫持的函数
        var oldSend, i;
        if( XMLHttpRequest.callbacks ) {
          判断XMLHttpRequest对象下是否存在回调列表,存在就push一个回调的函数
            // we've already overridden send() so just add the callback
            XMLHttpRequest.callbacks.push( callback );
        } else {
            // create a callback queue
            XMLHttpRequest.callbacks = [callback];
            如果不存在则在xmlhttprequest函数下创建一个回调列表
            // store the native send()
            oldSend = XMLHttpRequest.prototype.send;
            获取旧xml的send函数,并对其进行劫持
            // override the native send()
            XMLHttpRequest.prototype.send = function(){
                // process the callback queue
                // the xhr instance is passed into each callback but seems pretty useless
                // you can't tell what its destination is or call abort() without an error
                // so only really good for logging that a request has happened
                // I could be wrong, I hope so...
                // EDIT: I suppose you could override the onreadystatechange handler though
                for( i = 0; i < XMLHttpRequest.callbacks.length; i++ ) {
                    XMLHttpRequest.callbacks[i]( this );
                }
                循环回调xml内的回调函数
                // call the native send()
                oldSend.apply(this, arguments);
               由于我们获取了send函数的引用,并且复写了send函数,这样我们在调用原send的函数的时候,需要对其传入引用,而arguments是传入的参数
            }
        }
    }
    
    // e.g.
    addXMLRequestCallback( function( xhr ) {
            调用劫持函数,填入一个function的回调函数
            回调函数监听了对xhr调用了监听load状态,并且在触发的时候再次调用一个function,进行一些数据的劫持以及修改
            xhr.addEventListener("load", function(){
            if ( xhr.readyState == 4 && xhr.status == 200 ) {
                console.log( xhr.responseURL );
            }
        });
    
    });
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
  • TA的每日心情
    郁闷
    2023-11-22 09:19
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    2

    主题

    63

    回帖

    65

    积分

    初级工程师

    积分
    65

    新人报道油中2周年家财万贯

    发表于 2022-2-18 12:49:18 | 显示全部楼层
    真神了
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    回帖

    3

    积分

    助理工程师

    积分
    3
    发表于 2022-8-26 11:59:31 | 显示全部楼层
    牛皮,学到了
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    56

    回帖

    90

    积分

    初级工程师

    积分
    90

    新人报道

    发表于 2022-10-29 10:18:52 | 显示全部楼层
    怎样拦截和 补货特定网址的 xhr
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5196

    回帖

    6078

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6078

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2022-10-29 14:28:58 | 显示全部楼层
    Major 发表于 2022-10-29 10:18
    怎样拦截和 补货特定网址的 xhr

    直接在send 里做判断就好了
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    56

    回帖

    90

    积分

    初级工程师

    积分
    90

    新人报道

    发表于 2022-11-8 11:09:02 | 显示全部楼层
    可以将劫持的内容修改再返回到网页吗,或者劫持修改post内容再提交
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5196

    回帖

    6078

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6078

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2022-11-8 11:11:45 | 显示全部楼层
    Major 发表于 2022-11-8 11:09
    可以将劫持的内容修改再返回到网页吗,或者劫持修改post内容再提交

    可以的
    但返回内容修改要参考拦截器那节

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    16

    主题

    56

    回帖

    90

    积分

    初级工程师

    积分
    90

    新人报道

    发表于 2022-11-12 12:12:37 | 显示全部楼层
    李恒道 发表于 2022-11-8 11:11
    可以的
    但返回内容修改要参考拦截器那节

    可以发下链接吗
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5196

    回帖

    6078

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6078

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2022-11-12 14:57:39 | 显示全部楼层
    Major 发表于 2022-11-12 12:12
    可以发下链接吗

    [油猴脚本开发指南]XHR劫持的第二种格式
    https://bbs.tampermonkey.net.cn/thread-1201-1-1.html
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-28 10:00
  • 签到天数: 40 天

    [LV.5]常住居民I

    3

    主题

    19

    回帖

    54

    积分

    荣誉开发者

    积分
    54

    新人报道油中2周年

    发表于 2023-5-12 13:01:22 | 显示全部楼层
    哥哥牛逼,超级好用
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表