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

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

[复制链接]
  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    862

    回帖

    1361

    积分

    荣誉开发者

    积分
    1361

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2024-2-13 00:22:05 | 显示全部楼层
    dawnl-lc 发表于 2024-2-12 22:51
    想一站式解决,有没有野路子

    GM_webRequest只在油猴beta版提供,俗称“红猴”,你可以下一个试试。其他实现方式有专门做重定向的插件,比如这个:https://microsoftedge.microsoft. ... fdpfggcogaegfcjdcfp
    这些插件背后的原理都是webRequest这个API,由于谷歌宣布下一代的MV3标准即将废弃掉webRequest,这些插件届时可能会无法工作,如果你对插件开发有兴趣,可以研究下新的declarativeNetRequest,看看这个API怎么实现。
    回复
    订阅

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-2-17 18:40
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    15

    回帖

    22

    积分

    荣誉开发者

    积分
    22

    新人报道油中2周年油中3周年荣誉开发者

    发表于 2024-2-13 00:29:05 | 显示全部楼层

    李恒道 发表于 2024-2-13 00:08

    哥哥你试一下我提供的代码有没有hook掉AE呗
    我不太会调

    屏幕截图 2024-02-13 002758.png

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-2-17 18:40
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    15

    回帖

    22

    积分

    荣誉开发者

    积分
    22

    新人报道油中2周年油中3周年荣誉开发者

    发表于 2024-2-13 00:33:44 | 显示全部楼层

    cxxjackie 发表于 2024-2-13 00:22

    GM_webRequest只在油猴beta版提供,俗称“红猴”,你可以下一个试试。其他实现方式有专门做重定向的插件 ...

    屏幕截图 2024-02-13 003010.png
    专门做重定向的插件我也知道,但是这个脚本目标是开箱即用,尽量减少依赖项,如果拦截加载的方案没法实现的话就只能尝试抢先劫持了,我对抢先劫持如何实现毫无头绪。

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    9 小时前
  • 签到天数: 635 天

    [LV.9]以坛为家II

    30

    主题

    535

    回帖

    1409

    积分

    荣誉开发者

    积分
    1409

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2024-2-13 12:20:24 | 显示全部楼层
    李恒道 发表于 2024-2-12 23:56
    // ==UserScript==
    // @name         New Userscript
    // @namespace    http://tampermonkey.net/

    forEach中throw new Error只会中断剩余forEach
    不会造成剩余js代码中断
    哥哥换个地方大赦天下试试
    回复

    使用道具 举报

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

    [LV.7]常住居民III

    637

    主题

    5202

    回帖

    6082

    积分

    管理员

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

    积分
    6082

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

    发表于 2024-2-13 13:25:15 | 显示全部楼层
    steven026 发表于 2024-2-13 12:20
    forEach中throw new Error只会中断剩余forEach
    不会造成剩余js代码中断
    哥哥换个地方大赦天下试试 ...

    哥哥你在下方打个断点试试
    确实没有执行到
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-2-17 18:40
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    15

    回帖

    22

    积分

    荣誉开发者

    积分
    22

    新人报道油中2周年油中3周年荣誉开发者

    发表于 2024-2-13 18:14:55 | 显示全部楼层

    李恒道 发表于 2024-2-13 13:25

    哥哥你在下方打个断点试试
    确实没有执行到

    image.png

    const originalforEach = unsafeWindow.Array.prototype.forEach;
        unsafeWindow.Array.prototype.forEach = function (...args) {
            let err = new Error();
            if (err.stack.match(/main\..*\.js/img)) {
                GM_xmlhttpRequest({
                    url: [...document.head.children].filter((i) => i instanceof HTMLScriptElement && i.src.includes('main')).pop().src,
                    method: 'GET',
                    headers: {
                        'Content-type': 'application/x-www-form-urlencoded'
                    },
                    onload: function (xhr) {
                        GM_addElement('script', {
                            textContent: xhr.responseText.replace('An({', 'false && An({')
                        });
                        unsafeWindow.Array.prototype.forEach = originalforEach;
                        console.clear();
                    }
                });
                throw err;
            }
            return originalforEach.call(this, ...args);
        };

    改了一下生效了

    回复

    使用道具 举报

    12
    返回列表 发新帖

    发表回复

    本版积分规则

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