如何使用 Tampermonkey 获取网站的局部变量或者修改该变量所在的函数?

2019-10-12 18:46:55 +08:00
 Lunatic1

网页布局很简单:

<script> function(1) function(2) function btnonclick(type, obj) //目标函数 </script>

我的目的是获取该函数的一个变量,所以尝试用 Tampermonkey 重写一个函数用来替换目标函数,但是我的脚本总是在页面加载完成后执行,随后点击该 btn 执行的还是原函数,在 google 找到了很多资料但是仍然不能解决我的问题(我的前端很薄弱),各位 v2exer 能不能给一个思路,我被这个问题闹了很久了...

我的 Tampermonkey 代码:

(function() { function btnonclick(type, obj) {//代码}

var inject = document.createElement("script");
inject.setAttribute("type","text/javascript");
inject.appendChild(document.createTextNode("(" + btnonclick +")()"));
document.body.appendChild(inject);

})();

(function() { function btnonclick(type, obj) {//代码} unsafeWindow.btnonclick = btnonclick(); })();

4236 次点击
所在节点    前端开发
4 条回复
luoway
2019-10-12 19:41:47 +08:00
网页编程是基于事件驱动的,意味着你能访问的入口就是这些事件监听器。
这些事件监听器就是函数,函数可以被装饰,还可以被转为字符串。
思路可以是:
1. 获取特定 DOM 元素上的所有监听函数
2. 根据函数名或函数字符串特征,找到目标函数,删除 DOM 元素上的该监听器
3. 写一个函数包裹目标函数,添加到原 DOM 元素上。实现了替换监听器函数。
4. 若要修改目标函数运行逻辑,可以将目标函数转为字符串,再插入自写逻辑,转为函数替换目标函数

理论上可行,没实践过。
Lunatic1
2019-10-14 09:38:06 +08:00
@luoway 解决了,在 DOM 后面添加函数节点用以覆盖目标函数。
zhangzhenqian
2020-05-20 15:46:39 +08:00
你好,我现在也想搞个这个功能,我是后端,前端 js 油猴不是特别熟悉 摸索了一阵子 能否指教一下
Lunatic1
2020-05-20 15:58:00 +08:00
@zhangzhenqian 相互学习吧,写了这个脚本之后我就没碰过 Tampermonkey 的脚本。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/608728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX