cxxjackie
发表于 2024-2-13 00:22:05
dawnl-lc 发表于 2024-2-12 22:51
想一站式解决,有没有野路子
GM_webRequest只在油猴beta版提供,俗称“红猴”,你可以下一个试试。其他实现方式有专门做重定向的插件,比如这个:https://microsoftedge.microsoft.com/addons/detail/redirector/jdhdjbcalnfbmfdpfggcogaegfcjdcfp
这些插件背后的原理都是webRequest这个API,由于谷歌宣布下一代的MV3标准即将废弃掉webRequest,这些插件届时可能会无法工作,如果你对插件开发有兴趣,可以研究下新的declarativeNetRequest,看看这个API怎么实现。
dawnl-lc
发表于 2024-2-13 00:29:05
李恒道 发表于 2024-2-13 00:08
哥哥你试一下我提供的代码有没有hook掉AE呗
我不太会调
![屏幕截图 2024-02-13 002758.png](data/attachment/forum/202402/13/002832n7xh77b2i7g5j7xg.png)
没
dawnl-lc
发表于 2024-2-13 00:33:44
cxxjackie 发表于 2024-2-13 00:22
GM_webRequest只在油猴beta版提供,俗称“红猴”,你可以下一个试试。其他实现方式有专门做重定向的插件 ...
![屏幕截图 2024-02-13 003010.png](data/attachment/forum/202402/13/003038j0m9vnmzodzr9ppn.png)
专门做重定向的插件我也知道,但是这个脚本目标是开箱即用,尽量减少依赖项,如果拦截加载的方案没法实现的话就只能尝试抢先劫持了,我对抢先劫持如何实现毫无头绪。
steven026
发表于 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代码中断
哥哥换个地方大赦天下试试{:4_87:}
李恒道
发表于 2024-2-13 13:25:15
steven026 发表于 2024-2-13 12:20
forEach中throw new Error只会中断剩余forEach
不会造成剩余js代码中断
哥哥换个地方大赦天下试试 ...
哥哥你在下方打个断点试试
确实没有执行到
dawnl-lc
发表于 2024-2-13 18:14:55
李恒道 发表于 2024-2-13 13:25
哥哥你在下方打个断点试试
确实没有执行到
!(data/attachment/forum/202402/13/181419qtacut030bpuzdmr.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);
};
```
改了一下生效了
rhdom
发表于 2024-5-5 00:08:23
这个方式感觉有点意思啊。我试过so说的beforescriptexecute和MutationObserver,在chrome里都不行
granded
发表于 2024-5-6 17:52:38
最近我也遇到这个问题了,就是通过疯狂构造元素和src属性引入一大堆我不想要的变量很烦,我想直接拦截请求改代码
granded
发表于 2024-5-6 19:36:46
李恒道 发表于 2024-2-13 13:25
哥哥你在下方打个断点试试
确实没有执行到
哥哥可以解释下题主最后的代码吗,看不懂原理,如何做到加载前修改js的
李恒道
发表于 2024-5-6 21:22:54
granded 发表于 2024-5-6 19:36
哥哥可以解释下题主最后的代码吗,看不懂原理,如何做到加载前修改js的
就是找关键的系统一定会执行到的api
利用基础API hook来执行我们的代码
当执行到我们的代码之后通过爆出一个错误实现回溯堆栈
如果发现了是对应js文件
就主动触发出来一个错误
根据JS机制错误如果没有被catch到就会一致往上投递
到顶层还没人处理就直接中断掉了
我们再直接新搞一个js eval进去修改后的代码就可以了
但是注入点一定要注意副作用不能太严重
这个是在智慧树大赦天下的时候发现的很有意思的特性
还有一个iframe重置也有意思,但是由于CSP和兼容问题不完善