V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
woyao396
V2EX  ›  JavaScript

如何使用 js 完成“防撤回功能”?

  •  
  •   woyao396 · 2021-04-01 17:11:18 +08:00 · 2994 次点击
    这是一个创建于 1369 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司自己的 IM 是基于Electron构建的 可以调出控制台插入任意的 js 代码。

    有个想法就是能不能实现从 dom 或其他层面实现防撤回,自己有个想法是:

    监听 dom 移除的事件,然后如果是消息撤回相关的 dom 移除,就阻止移除或重新插入

    不知道这个方案现不现实 能不能实现?

    14 条回复    2021-04-02 09:56:08 +08:00
    cydysm
        1
    cydysm  
       2021-04-01 17:18:53 +08:00
    不能禁用 devtools 吗
    seki
        2
    seki  
       2021-04-01 17:19:00 +08:00
    按照我的理解,IM 的信息不是发送到服务端里面储存,客户端只负责展示吗,用户删除 dom 的意义是什么

    然后其实是有办法禁止开发者工具和调试参数的,但这个不治本,因为用户最终还是可以打开 asar 做他想做的事情
    woyao396
        3
    woyao396  
    OP
       2021-04-01 17:23:55 +08:00
    @cydysm
    @seki
    我指的是用户怎么用 js 去实现防撤回的逻辑、不是 IM 的开发组禁止 devtools 之类的
    Jirajine
        4
    Jirajine  
       2021-04-01 17:30:55 +08:00
    MutationObserver

    或者你直接 setInterval 轮询,不断读取 dom 列表,发现比之前少了就加回去。
    xcstream
        5
    xcstream  
       2021-04-01 17:50:19 +08:00
    理论上可以
    Kasumi20
        6
    Kasumi20  
       2021-04-01 19:16:08 +08:00
    您这套系统有点牛啊
    zhuweiyou
        7
    zhuweiyou  
       2021-04-01 19:19:04 +08:00
    hook websocket 的 on message
    ch2
        8
    ch2  
       2021-04-01 19:19:52 +08:00
    开 debuger,你自己撤回一次,然后断点 trace 到功能函数,然后把那个函数给 hook 掉使它无效
    superrichman
        9
    superrichman  
       2021-04-01 19:23:27 +08:00 via iPhone
    直接把撤回消息的函数干掉就完事了
    BeautifulSoap
        10
    BeautifulSoap  
       2021-04-01 19:27:16 +08:00 via Android
    防撤回应该没问题,但还不够。你还得把撤回的信息保存在本地动态插入加载。否则的话重启下软件拦截下的消息就没了
    cereschen
        11
    cereschen  
       2021-04-01 19:31:14 +08:00
    找到你想监听的 dom 然后重写 removeChild 就可以避免被删除元素了
    meepo3927
        12
    meepo3927  
       2021-04-02 09:11:52 +08:00
    没太明白, 撤回功能是哪来的? 开发的吗?
    crclz
        13
    crclz  
       2021-04-02 09:49:09 +08:00
    将所有消息再存一份即可
    Roger006
        14
    Roger006  
       2021-04-02 09:56:08 +08:00
    重写 [删除消息的函数] ,让它能执行,但不起作用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:30 · PVG 03:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.