# Emoji选择器导致Android/Chrome中的消息编辑器崩溃

**URL:** <https://meta.discourse.org/t/emoji-selector-crashes-the-message-editor-in-android-chrome/187009>\
**Category:** Bug\
**Tags:** composer\
**Created:** [2021 年4 月 15 日 20:06 UTC](https://meta.discourse.org/t/emoji-selector-crashes-the-message-editor-in-android-chrome/187009 "2021-04-15T20:06:52Z")\
**Posts on this page:** 1\
**Showing post:** 24

<div class="post-metadata">

作者： ![Osama](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/osama/32/98013_2.png) [@Osama](https://meta.discourse.org/u/Osama)\
发布日期： [2021 年11 月 17 日 22:11 UTC](https://meta.discourse.org/t/emoji-selector-crashes-the-message-editor-in-android-chrome/187009/24 "2021-11-17T22:11:12Z")

</div>

好的，我今天又看了一下，在将手机上的虚拟键盘切换到 Gboard 后，我成功重现了这个问题。Gboard 有时会对单个按键操作触发两次 `keydown` 和 `keyup` 事件，如果这发生在您在从自动补全中选择表情符号之前按下的最后一个键，就会导致崩溃。

我不确定是什么原因导致 Gboard 触发这些事件两次，但这似乎取决于您输入的内容和您的 Gboard 设置。

这两个事件导致崩溃的原因在于我们的自动补全库的设计方式。该库会监听 `keydown` 和 `keyup` 事件，在 `keydown` 时清除自动补全建议，在 `keyup` 时根据新的自动补全词条提供新建议。

但是，有一个小的保护/优化措施可以防止库在词条自上次建议以来未更改时执行重复工作，而问题就出在这里。第一对 `keydown` 和 `keyup` 事件会按预期清除旧建议并提供新建议，但第二对错误的事件会在 `keydown` 时再次清除建议，但在 `keyup` 时不会提供新建议，因为自动补全词条没有改变。

我能想到的唯一最不“hacky”的“修复”方法是移除保护/优化措施，让库在 `keyup` 时始终提供新建议，但我不知道这是否是期望的，或者是否值得这样做。

我知道我们最终想要重写我们的自动补全库（它是代码库中最古老的部分之一，急需重写），所以也许这个 bug 可以等到我们重写的时候再处理？

---

_[View the full topic](https://meta.discourse.org/t/emoji-selector-crashes-the-message-editor-in-android-chrome/187009)._
