Lunatic1

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

  •  
  •   Lunatic1 · Oct 12, 2019 · 4934 views
    This topic created in 2442 days ago, the information mentioned may be changed or developed.

    网页布局很简单:

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

    理论上可行,没实践过。
    Lunatic1
        2
    Lunatic1  
    OP
       Oct 14, 2019
    @luoway 解决了,在 DOM 后面添加函数节点用以覆盖目标函数。
    zhangzhenqian
        3
    zhangzhenqian  
       May 20, 2020
    你好,我现在也想搞个这个功能,我是后端,前端 js 油猴不是特别熟悉 摸索了一阵子 能否指教一下
    Lunatic1
        4
    Lunatic1  
    OP
       May 20, 2020
    @zhangzhenqian 相互学习吧,写了这个脚本之后我就没碰过 Tampermonkey 的脚本。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2531 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 12:21 · PVG 20:21 · LAX 05:21 · JFK 08:21
    ♥ Do have faith in what you're doing.