• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Chinsung
V2EX  ›  程序员

钉钉是浏览器套壳吗

  •  
  •   Chinsung · Oct 13, 2021 · 12053 views
    This topic created in 1849 days ago, the information mentioned may be changed or developed.

    事情起因

    群里前端说有个问题,就是输入框在输入中文时,如果做了长度限制,那么此时输入中文拼音,正常情况下会导致拼音无法正常输入,因为 web 上的文本框里,输入法打的字都会先以拼音形式出现在文本框里,再按空格之后再转换为汉字替换现在文本框中。
    

    发现

    发现在 web 上如此,为什么 windows 不会呢?试了所有 QQ,微信,TG 等等常用客户端软件,都是打了字,输入框里并不会出现字,而是选择了之后直接出现在输入框里。
    只有伟大的钉钉,表现和浏览器一模一样。
    试了一些小众或者个人开发的客户端软件,也是和 QQ 这些一样,说明在 windows 客户端上,这应该是个很轻松 easy 的功能,所以猜测钉钉其实是个浏览器套壳。
    
    55 replies  •  2021-10-19 10:06:24 +08:00
    xieqiqiang00
    xieqiqiang00
    Oct 13, 2021
    1
    我的 web 不会有这种问题
    TomatoYuyuko
    TomatoYuyuko
    Oct 13, 2021
    2
    不一定什么载体都有可能出这个问题,单纯是个逻辑性 bug,限制长度的方法不止一个,你说的这种最省事也最容易触发这个 bug
    yiqiao
    yiqiao
    Oct 13, 2021
    3
    Mac 的客户端都是啊。。。
    Vegetable
    Vegetable
    Oct 13, 2021
    4
    你猜的对,钉钉至少有一段时期是通过这种技术栈实现的。更别说现在大量功能一看就是网页了。
    christin
    christin
    Oct 13, 2021 via iPhone
    5
    那按照你的逻辑王者荣耀也是浏览器套壳咯
    wanguorui123
    wanguorui123
    Oct 13, 2021
    6
    是浏览器
    NEVERCODE
    NEVERCODE
    Oct 13, 2021
    7
    ![2021-10-13 14-55-24 的屏幕截图.png]( http://tva1.sinaimg.cn/large/007Hwfdzly1gvdovy4t7hj61hc0u0npd02.jpg)
    NEVERCODE
    NEVERCODE
    Oct 13, 2021
    8
    刚刚的截图,不知道为什么要用这玩意办公。
    zxcslove
    zxcslove
    Oct 13, 2021
    9
    局部使用也是常见做法
    horou
    horou
    Oct 13, 2021
    10
    可能是用的类似 electron 这种技术吧
    mXw
    mXw
    Oct 13, 2021
    11
    cef
    Oktfolio
    Oktfolio
    Oct 13, 2021
    12
    好像是一个类似 electron 的库,所以各种卡顿各种 bug 。
    darknoll
    darknoll
    Oct 13, 2021
    13
    这么多人不知道 cef 吗
    Loku
    Loku
    Oct 13, 2021
    14
    @NEVERCODE 出了 Linux 版,不必 wine 了。
    zjsxwc
    zjsxwc
    Oct 13, 2021
    15
    钉钉桌面客户端很难用,体验很差,
    只有手机端 app 可以用。
    zjsxwc
    zjsxwc
    Oct 13, 2021
    16
    @zjsxwc 收回上面这句话,
    应该是不知道为什么 windows 版钉钉很难用,老是页面卡着不动,
    linux 版钉钉还行
    skiy
    skiy
    Oct 13, 2021
    17
    不是。
    有个开源版的是基于 electron 的。钉钉目前自家的应该应该也不是。
    (我说的是 LINUX 版的)
    markgor
    markgor
    Oct 13, 2021❤️1
    18
    钉钉没研究过,但微信就是跑 nodejs,开发者工具和企业微信一样。
    我觉得没必要在乎它用什么写...
    而你们前端提到的我觉得和是否 web 形式毫无关联...
    在 web 中本来就没有限制字数的功能( textarea ),
    都是靠 JS 来实现的,
    JS 绑定的触发不同,实现出来的逻辑表现就不同;
    比方我绑定 onChange/input 时,输入的时候就会出现你提到的问题。
    但是如果我绑定的是 blur,那就不会出现这个问题。
    NEVERCODE
    NEVERCODE
    Oct 13, 2021
    19
    @Loku 官网无,在哪里下载啊?
    madlifer
    madlifer
    Oct 13, 2021
    20
    win 版钉钉经常性内存占用过高,我觉得有内存泄露方面的 bug
    musi
    musi
    Oct 13, 2021
    21
    只能说是嵌了一个浏览器,部分功能是用 web 实现的
    littlewing
    littlewing
    Oct 13, 2021
    22
    electron
    yanue
    yanue
    Oct 13, 2021
    24
    基于 electron
    oott123
    oott123
    Oct 13, 2021
    25


    这个推理不对,照这么说 word 也是 web 套壳了……

    浏览器这样表现 不代表 这样表现的都是浏览器
    inhzus
    inhzus
    Oct 13, 2021 via iPhone
    26
    小程序显然是在容器里边,app 本身是原生的
    skye
    skye
    Oct 13, 2021
    27
    虽然你的结论我支持,但是推理逻辑不是很支持。。。
    jousca
    jousca
    Oct 13, 2021
    28
    钉钉就是套的 CHROME 。我观察过进程。PC 端占用内存巨大,甚至能到 2 ~ 3 个 G 的内存。
    ysc3839
    ysc3839
    Oct 13, 2021 via Android
    29
    看相关文件可以很容易得知,钉钉既用了 duilib 也用了 cef 。
    jousca
    jousca
    Oct 13, 2021
    30
    @madlifer 对,我也发现这个问题。PC 端一开,电脑内存消耗好几个 G
    J55s5
    J55s5
    Oct 13, 2021
    31
    在安装目录翻一翻不就知道是啥了嘛
    jousca
    jousca
    Oct 13, 2021
    32
    不知道有没有钉钉开发人员看到这个帖子。windows 端占有内存巨大,影响客户机性能的问题啥时候解决下?
    PrinceofInj
    PrinceofInj
    Oct 13, 2021
    33
    @jousca 不会吧?不会吧?还有人不是 32G 内存?
    yangheng4922
    yangheng4922
    Oct 13, 2021
    34
    PC 微信打字也是先出拼英再出文字的
    TonyG
    TonyG
    Oct 13, 2021
    35
    主体是 nw.js
    jousca
    jousca
    Oct 13, 2021
    36
    @PrinceofInj 哈哈哈,ZF 采购的电脑,限价导致低配。客户天天吐槽。
    deetz
    deetz
    Oct 13, 2021
    37
    手动 re 25 26 27.

    某些部件有调用 HTML5 页面,特别是同特定组织相关的。
    ychost
    ychost
    Oct 13, 2021
    38
    混合架构,有 H5 也有 Native 和小程序
    MzM2ODkx
    MzM2ODkx
    Oct 13, 2021
    39
    钉钉早期是用 NW.JS 现在不知道
    sugarsalt
    sugarsalt
    Oct 13, 2021
    40
    我的输入法是可以自己选择的,选项叫 inline_preedit,可以选输入框里不显示,或者显示拼音或别的输入码,或者显示转换好的字(第一个候选项)
    FrankFang128
    FrankFang128
    Oct 13, 2021
    41
    https://github.com/duilib/duilib
    钉钉用的是这个吧
    swordspoet
    swordspoet
    Oct 14, 2021
    42
    阿里系的 app 没几个能打的,除了淘宝。
    2i2Re2PLMaDnghL
    2i2Re2PLMaDnghL
    Oct 14, 2021
    43
    原来魔兽世界是浏览器套壳
    厉害了呀,什么时候 Google 和 Mozilla 能有暴雪一半的技术力优化一下浏览器运行效率就好了(笑
    Torpedo
    Torpedo
    Oct 14, 2021
    44
    钉钉没用过,所以不讨论你主题。

    但是起因我知道,浏览器里设置 input 长度,默认的 onChange 打拼音的时候也会触发。这种应该用 CompositionEvent 这个事件 https://developer.mozilla.org/zh-CN/docs/Web/API/CompositionEvent, 就能达到你说的 windows 的效果
    shadowyue
    shadowyue
    Oct 14, 2021
    45
    https://nwjs.io/ 用的这个吧
    hi543
    hi543
    Oct 14, 2021
    46
    别的界面不清楚,钉钉群直播的那个界面是 WEB 。为什么?我中间人插入过 JS,并执行了。
    newmlp
    newmlp
    Oct 14, 2021
    47
    钉钉用的 cef,至于输入法这个,要看窗口具体实现,可以显示输入过程也可以只显示结果
    szq8014
    szq8014
    Oct 14, 2021
    49
    偶然发现,windows 上用 ProcessExplorer ( https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer) 发现钉钉相比于其它日常应用属于独树一枝,不知道具体原因是什么,具体表现就是:
    不管是 idea64/wechat.exe/msedge.exe/xmind.exe/甚至包含 onedrive/everything 都是挂在 explorer.exe 进程下的,唯独钉钉不是。


    图例: ![ProcessExplorer]( )
    xiao201261
    xiao201261
    Oct 14, 2021
    50
    ```Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9
    Host: hidden
    Referer: hidden
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 dingtalk-win/1.0.0 nw(0.14.7) DingTalk(6.0.30-Release.9178701) Mojo/1.0.0 Native AppType(release) Channel/201200
    SEC-FETCH-DEST: document
    SEC-FETCH-MODE: navigate
    SEC-FETCH-SITE: same-origin
    SEC-FETCH-USER: ?1
    UPGRADE-INSECURE-REQUESTS: 1```
    NormanGhost
    NormanGhost
    Oct 14, 2021
    51
    基本上就是 electron.js ,我就是前端,也给公司的桌面端软件开发,用的也是 electron.js 。这东西就是占内存,没办法一个 Chromium 一个 Node.js 可想而知。最近,有个 rust 写的跨平台框架 tauri 看起来感觉不错,解决了内存占用和软件包太大的问题。有时间研究一下
    Chinsung
    Chinsung
    OP
    Oct 19, 2021
    52
    @oott123 好像与输入法有关。
    不过钉钉用搜狗也是会出现字
    Chinsung
    Chinsung
    OP
    Oct 19, 2021
    53
    @2i2Re2PLMaDnghL #43 是标题里的那个吗不够显眼?
    2i2Re2PLMaDnghL
    2i2Re2PLMaDnghL
    Oct 19, 2021
    54
    @Chinsung 为了帮助没玩过魔兽世界的同学理解,魔兽世界也是『输入法打的字都会先以拼音形式出现在文本框里』。或者说暴雪的游戏全部都是这样的。这不构成判据。

    这个东西分为两个方面:1. 输入法将输入法状态传递给 ime/tsf 框架; 2. 应用程序根据 ime/tsf 框架显示半输入状态。而各种游戏大多都能更进一步,阻止 ime 自行获取输入而由游戏程序喂给 ime,避免控制失效问题;同时阻止 ime 自己的任何显示,避免层叠渲染问题。
    2i2Re2PLMaDnghL
    2i2Re2PLMaDnghL
    Oct 19, 2021
    55
    另外,在应用程序中采用 Web 技术实现部分界面也不能说套壳。
    比如战网启动器,可以从文件名猜出 Qt + QtWebEngine + Vue
    但不用 C++ 直接操作二进制可难写出暴雪那下载逻辑和存储结构
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1331 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 92ms · UTC 21:56 · PVG 05:56 · LAX 13:56 · JFK 16:56
    ♥ Do have faith in what you're doing.