V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Lunatic1
V2EX  ›  前端开发

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

  •  
  •   Lunatic1 · 2019-10-12 18:46:55 +08:00 · 4242 次点击
    这是一个创建于 1902 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网页布局很简单:

    <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(); })();

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

    理论上可行,没实践过。
    Lunatic1
        2
    Lunatic1  
    OP
       2019-10-14 09:38:06 +08:00
    @luoway 解决了,在 DOM 后面添加函数节点用以覆盖目标函数。
    zhangzhenqian
        3
    zhangzhenqian  
       2020-05-20 15:46:39 +08:00
    你好,我现在也想搞个这个功能,我是后端,前端 js 油猴不是特别熟悉 摸索了一阵子 能否指教一下
    Lunatic1
        4
    Lunatic1  
    OP
       2020-05-20 15:58:00 +08:00
    @zhangzhenqian 相互学习吧,写了这个脚本之后我就没碰过 Tampermonkey 的脚本。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5743 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:56 · PVG 10:56 · LAX 18:56 · JFK 21:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.