技术选型
从确定要开发富文本编辑器到正式立项,差不多只有一周的时间,在这周内我结合公司已有的业务调研了市面上富文本编辑器的实现方式。主要有以下两种:
- Android原生实现,主要通过EditText,Span等相关技术。优点:交互效果比较理想,绕过了WebView的兼容性等问题。
缺点:不能与网页端文本编辑器实现互通,web端通过css等实现一些新样式,原生如果要兼容新样式,就需要发版本支持,不够灵活。 - WebView+javascript方式实现。
优点:能够与网页端实现互通,减少了对客户端的依赖,网页端出新样式,只需要通过更新JS就可以支持。
缺点:首先要建立JS与原生之间稳定的沟通渠道(可以通过JSSDK来提供支持)。交互效果没有原生的理想。需要兼容各个版本的WebView以及其他兼容性问题。
考虑到App端需要与网页端实现内容互通,选取第二种方式作为我们富文本编辑器的实现方式。大致思路如下:
- 请求服务端接口,查询是否有JS更新,下载最新的编辑器JS。
- 挂载编辑器JS和其他JS(JSSDK),实现Js与Java互相调用。
编辑器内容逻辑,比如文字换行,图片插入和删除,字体加黑等都通过JS来实现。编辑器的复杂逻辑,比如多线程图片上传,图片上传失败重试,草稿保存与恢复等都是通过js调用java方法来实现。
编辑器最终实现效果在差强人意,但是还存在一些三方ROM兼容性缺陷。
下面谈一下在开发编辑器的过程中的积累的一些经验。
JS的挂载
J