请教下各位大佬,如何捕获页面的所有请求(页面最开始就监听),并且在页面响应完成后再修改页面的内容?而且可以在之后的异步请求发出后依然可以捕获和感知?
![]() |
1
shendaowu 63 天前
胡乱建议。MutationObserver 。之前我好像有类似的需求,然后不知道怎么就用这个解决了。
|
![]() |
2
ns09005264 63 天前
https://www.tampermonkey.net/documentation.php#meta:run_at
脚本可以通过该声明选择加载时机。 至于请求拦截就不清楚了,也许可以试试修改 window.fetch ,不知道有没有用 service worker 可以很好的拦截请求,但我不确定在用户脚本中能否注册 service worker. https://stackoverflow.com/questions/1549779/is-it-possible-to-use-workers-in-a-greasemonkey-script |
3
LuckyLauncher 63 天前
@shendaowu #1 建议你不要建议,MutationObserver 是检测 dom 修改的
|
![]() |
4
LudwigWS 62 天前 via iPhone
我猜 TamperMonkey 做不到这一点,楼主发现方案的时候踢我一脚哈
|
![]() |
5
NiaoBlush 62 天前 via iPhone
TamperMonkey 应该是没这能力
|
6
zzwudev 62 天前
MV2 的 Tampermonkey 提供了一个 GM_webRequest API 是可以以[声明式]( https://www.tampermonkey.net/documentation.php?locale=en#meta:webRequest) 或者 [API 调用式]( https://www.tampermonkey.net/documentation.php?locale=en#api:GM_webRequest) 的方式拦截、重定向请求或者触发回调的。可惜的是 Chrome 今年就会把 MV3 标准铺开了,MV3 不再提供 webRequest 这样的 API ,有一个 declarativeNetRequest ,但是会有更多的限制,导致 Tampermonkey MV3 版本目前去掉了 GM_webRequest API 。
|
![]() |
7
shendaowu 62 天前
@LuckyLauncher #3 我最开始是想搞个类似面向切面编程的方法,但是后来好像发现行不通,要么就是太复杂。后来转变了一下思路,反正每次请求之后都会更新 DOM ,不如直接检测 DOM 修改,检测到改了之后我再读取相应的页面内容根据情况改。看起来 OP 最终也是为了修改页面内容,所以就赌了一下,建议了一下。应该是我之前没说明白,现在你感觉我说的东西可以凑合用了吗?如果我没搞错的话,我怀疑你是不是过于关注 OP 提的问题( question )而不是 OP 面对的问题( problem )了?有个相关的东西叫 XY 问题,如果是的话推荐了解一下。
|
8
LuckyLauncher 62 天前
@shendaowu #7 即使现在我也不觉得你的方法可以凑合用,也不用扯什么 xy 问题,只是刚好的你的情况可以这样,但不是所有的请求都会反应到 dom 上,就算反应到 dom 上也有可能是被处理过的,比如接口给的是明文但前端混淆了(草台班子真的会这么干,我遇到过好几个系统),只能说具体情况具体分析,但是你上来什么都不说直接说个 MutationObserver 无疑是给 op 增加理解负担,等他花费大力气理解了你的意思然后尝试了一遍后发现并不行,这不是误人子弟么
|
9
dode 61 天前
建议你部署一个后台代理劫持服务,前端所有的请求到你的服务器,服务器请求&修改后响应返回给页面
|
![]() |
10
shendaowu 61 天前
@LuckyLauncher #8 好的,接受 90%,以后我会提供适用范围。剩下那 10% 是因为我之前也是类似 OP 的思路,但是好像没找到比较好的实现方式。还有我开头的胡乱建议就是字面意思,不是什么梗。但是你说的建议我不建议我 100% 不接受。因为我这个人很自私,我回复很大成分都是为了练习表达,一小部分才是为了帮别人。
|