编辑器内部逻辑缺陷导致
中间版本产生的错误数据
对已知的一些脏数据尝试修复与清洗
读信与编辑区域样式处理逻辑不一致
保证进入编辑器初始化的内容与读信页优化结构后显示的内容保持一致
内部逻辑组装的样式不兼容
通过 CI 静态分析 / 自动化测试保证内部逻辑不会生成 Outlook 不兼容的 HTML 结构
外部数据 (不可预知)
有准确解决办法的,通过自动转换,转换成兼容的结构
如:识别到粘贴板数据里面的 `!important` 规则直接去掉避免影响编辑
对于没有完美解决方案,但是有副作用的方案,引入自动识别不兼容结构的组件,提示用户自行点击后自动清洗所有不兼容的结构
如:识别到粘贴板数据里面含有 `position: absolute` 绝对定位的元素则提示用户,让用户主动点击清洗
VML 数据被错误清洗导致结构丢失样式
在编辑过程保留 VML 结构避免信息丢失
HTML 数据本身不兼容 web (不可预知)
有准确解决办法的,通过自动转换,转换成兼容的结构
如:组装的某个邮件上边距使用 MSO 属性 `mso-margin-top-alt`,这种是可以明确通过 `margin-top` 转换适配
对于没有完美解决方案,但是有副作用的方案,引入自动识别不兼容结构的组件,提示用户自行点击后自动清洗所有不兼容的结构
如:Outlook 对于 white-space: pre-wrap 样式是不支持渲染的,但在 W3C 下是能支持,这就导致若清洗该样式,导致渲染变化(无法确认是否属于原作者原意)