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

如何在脚本中拦截页面加载script

[复制链接]
  • TA的每日心情
    擦汗
    2024-5-7 18:25
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    5

    主题

    23

    回帖

    32

    积分

    助理工程师

    积分
    32
    发表于 2024-5-6 22:45:36 | 显示全部楼层
    李恒道 发表于 2024-5-6 21:22
    就是找关键的系统一定会执行到的api
    利用基础API hook来执行我们的代码

    懂了,那看来我还是直接另起炉灶快些,我这个是委派了一个自定义点击事件上传文件,我直接构造xhr快些。
    回复
    订阅

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-5-7 18:25
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    5

    主题

    23

    回帖

    32

    积分

    助理工程师

    积分
    32
    发表于 2024-5-6 23:08:18 | 显示全部楼层
    李恒道 发表于 2024-5-6 21:22
    就是找关键的系统一定会执行到的api
    利用基础API hook来执行我们的代码

    我突然发现他用了appendchild添加script,那我直接hook这个了哈哈
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2024-9-1 16:21:14 | 显示全部楼层
    我今天实际试了一下,拦截后再执行原有脚本代码也达不到原有的效果,不知道为什么?
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2024-9-1 16:22:39 | 显示全部楼层
    // ==UserScript==
    // @name         拦截脚本加载
    // @namespace    http://tampermonkey.net/
    // @version      2024-09-01
    // @description  try to take over the world!
    // @author       You
    // @match        https://dailydictation.com/exercises/ielts-listening/cam19-test-3-part-2.1375/listen-and-type
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=dailydictation.com
    // @grant        GM_xmlhttpRequest
    // @grant        unsafeWindow
    // @run-at       document-start
    // @grant        GM_addElement
    // ==/UserScript==
    
    const origiforEach=unsafeWindow.Array.prototype.forEach
    
    function runScript(){
        GM_xmlhttpRequest({
            url:"https://dailydictation.com/assets/appDictation.3872752ea90dfe30bc7c.js",
            method :"GET",
            headers: {
                "Content-type": "application/x-www-form-urlencoded"
            },
            onload:function(xhr){
    
                console.log(xhr.responseText);
    
                GM_addElement('script', {
                    textContent: xhr.responseText // .replace('An({', 'false && An({')
                });
            }
        });
    }
    
    unsafeWindow.Array.prototype.forEach=function(...args){
        let err= new Error('大赦天下');
        // console.log('keys大赦天下',err)
        if(err.stack.indexOf('appDictation.3872752ea90dfe30bc7c.js')!==-1){
            console.log("拦截成功")
            runScript()
            throw err;
        }
    
        return origiforEach.call(this,...args)
    }
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2024-9-1 16:24:03 | 显示全部楼层
    @李恒道 大佬,能不能帮忙看看为什么
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2024-9-1 16:54:06 | 显示全部楼层
    此外,我试了下GM_webRequest,只能工作于几个fetch类型的请求,script类型的不能拦截
    GM_webRequest([
            { selector: '*dailydictation.com/*', action: 'cancel' }
    ], function(info, message, details) {
            console.log("Request Info:", info);
            console.log("Message:", message);
            console.log("Details:", details);
    });
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2024-9-1 17:17:01 | 显示全部楼层
    知道了,GM_webRequest可以,需要加上// @run-at       document-start
    但是神奇的是,我重定向到另外一个地址后,执行效果就不一样了。(神奇了,raw.githubusercontent.com返回0KB,用jsdelivr转一下终于可以了。。。)
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5961

    回帖

    6760

    积分

    管理员

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

    积分
    6760

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

    发表于 2024-9-2 18:14:19 | 显示全部楼层
    rhdom 发表于 2024-9-1 16:24
    @李恒道 大佬,能不能帮忙看看为什么

    哥哥下次尽量单开一个贴
    我旅游去了今天刚回来QAQ
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-3 14:48
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    20

    回帖

    18

    积分

    助理工程师

    积分
    18
    发表于 2024-9-5 13:24:34 | 显示全部楼层
    李恒道 发表于 2024-9-2 18:14
    哥哥下次尽量单开一个贴
    我旅游去了今天刚回来QAQ

    回复

    使用道具 举报

    123
    返回列表 发新帖

    发表回复

    本版积分规则

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