MorFansLab/LiteWebChat_Frame

JS渲染对话框刷新时会导致对话框内的HTML组件被强制刷新

Closed this issue · 2 comments

YubaC commented

PR #9 中添加了lite-chatbox.js文件,用于实时渲染消息。

但是这带来了一个问题,该JS文件在插入新消息的时候,所使用的方法是:首先将所有的历史消息全部删除,然后在消息列表里添加新消息,最后全部重新渲染。

这样的缺点是,在有比较大量的历史文件的时候添加新消息会造成延时;其次,对话框内可能会含有一些特殊的HTML组件,比如iframe、canvas等,当它们被删除后重新添加会造成其中的数据丢失

这里的逻辑是因为我不确定每个人的需求(我遇到过每次刷新消息数据都是获取所有的,也遇到过只返回未读的。。。。。),所以我用的是最简单的渲染方法,但是实际上我加了一个_isRender_字段,我是根据这个字段来判断数据是否已经渲染过的。如果渲染过了就会跳过当前的消息。如果你的需求中消息会更频繁并且数据很大,可以在发送消息成功后使用insertAdjacentHTML 函数在末尾添加一条数据。

YubaC commented

好的,不好意思我当时并没有仔细验证。
不过我建议在示例文件里加入这个说明或代码以供参考,因为我有不少同僚(包括我在内)是很依靠这些示例来研究代码的。
同时我建议写一个说明文件添加到README里以便后来者参考学习。