

























这是一个创建于 1005 天前的主题,其中的信息可能已经有所发展或是发生改变。
最近在研究一个古老的系统,想写一个油猴脚本。我发现页面中有这样的代码:
$(document).ready(
closeIt();
)
程序会在 dom 加载完后检查浏览器版本,不满足直接关闭页面窗口。 那么,油猴脚本能否拦截 ready 函数,不让其执行原来的程序呢?
1 kkk9 2023 年 9 月 13 日实践出真知! ```javascript |
2 kkk9 2023 年 9 月 13 日漏了一个) 记得自己补足 |
3 ysc3839 2023 年 9 月 13 日 via Android拦截 ready 肯定行呀,替换掉“$”,然后调用原函数,判断一下传入的参数是不是 document ,或者返回的对象有没有 ready 函数,有的话替换掉 ready 。 |
4 caomu 2023 年 9 月 13 日 via Android如果不是直接载入脚本,而是用浏览器扩展载入的话,主流的 gm 、tm 、vm 扩展应该都是支持设置脚本生效时间,默认是页面载入完成后,也可以手工改成载入开始时。 |
5 vvhy 2023 年 9 月 13 日用//@run-at document-start ,还不够快的话去设置开启即时注入 |
6 Tsccai 2023 年 9 月 13 日@ysc3839 呃,因为网页其他代码还需要用 jQuery ,所以直接干掉$是不可取的。我是准备在原本的 closeIt 函数加载后,ready 执行前,用油猴注入一个新的 closeIt 函数,函数里面啥也不干。但这样干有一个小瑕疵,就是不能保证每次都成功。 |
8 ysc3839 2023 年 9 月 13 日 via Android@Tsccai 如果 closeIt 是全局的话,似乎可以用 getter 和 setter 来阻止覆盖。 |
10 Tsccai 2023 年 9 月 13 日@ysc3839 原网页位于单位内网,不方便展示。不过 closeIt 这个函数确实在 window 对象下,我其实通过覆盖一个同名函数的方式也能大致实现,就是不大稳定 |
14 Puteulanus 2023 年 9 月 14 日我问 ChatGPT 它这么说的: 那在 @run-at document-start 的时候直接把 document 上的这两个函数劫持掉试试 |
15 openmynet 2023 年 9 月 14 日```js // @run-at document-start Object.defineProperty(window, "$", { ``` |
17 chnwillliu 2023 年 9 月 14 日 via Android为什么要覆盖这些?覆盖 $.fn.ready 不就行了? 看来 jQuery 是真老了,没人知道了。 $.fn.ready = function (){ } |
19 Tsccai 2023 年 9 月 27 日过了半个月终于是有空在单位的电脑上试一下了。 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。