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

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

  •  
  •   Lunatic1 · 37 天前 · 600 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网页布局很简单:

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

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

    理论上可行,没实践过。
        2
    Lunatic1   35 天前
    @luoway 解决了,在 DOM 后面添加函数节点用以覆盖目标函数。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4081 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 35ms · UTC 01:29 · PVG 09:29 · LAX 17:29 · JFK 20:29
    ♥ Do have faith in what you're doing.