编辑器内部逻辑缺陷导致
如:在组装表格的时候没有正确清洗辅助性 UI 或错误设置表格宽度为 0 导致发出去的表格宽度和编辑时产生不一致
中间版本产生的错误数据
如:中间版本产生的邮件存在副作用样式,导致编辑的时候自动清洗就会存在有不一致的地方
读信与编辑区域样式处理逻辑不一致
如:目前读信页样式优化兼容 Outlook 的逻辑并没有在写信区域保持一致转换逻辑,导致编辑看到的和读信页看到的不一致
内部逻辑组装的样式不兼容
如:在组装表格的时候没有正确清洗依稀辅助性 UI 或错误设置表格宽度为 0 导致发出去的表格宽度和编辑时产生不一致
外部数据 (不可预知)
粘贴数据
如:从外部拷贝的 HTML 带有副作用样式
红色字体
第三方邮件(Outlook / 会议空间等)
如:从 Outlook 发来的邮件或会议空间邮件本身的 HTML 含有 Outlook 本身不兼容的样式
VML 数据被错误清洗导致结构丢失样式
如:VML 注释条件被错误清理导致 HTML 结构出错
HTML 数据本身不兼容 web (不可预知)
如:Outlook 组装的邮件行高与其本身的渲染行为不一致
行高文本
如:Outlook 组装的邮件设置表格背景颜色为白色,但对某个单元格设置透明颜色
如:Outlook 组装的邮件含有下划线样式但对其中的文本设置了不含下划线样式
假定没有下划线
对已知的一些脏数据尝试修复与清洗
保证进入编辑器初始化的内容与读信页优化结构后显示的内容保持一致
通过 CI 静态分析 / 自动化测试保证内部逻辑不会生成 Outlook 不兼容的 HTML 结构
有准确解决办法的,通过自动转换,转换成兼容的结构
如:识别到粘贴板数据里面的 `!important` 规则直接去掉避免影响编辑
对于没有完美解决方案,但是有副作用的方案,引入自动识别不兼容结构的组件,提示用户自行点击后自动清洗所有不兼容的结构
如:识别到粘贴板数据里面含有 `position: absolute` 绝对定位的元素则提示用户,让用户主动点击清洗
在编辑过程保留 VML 结构避免信息丢失
如:组装的某个邮件上边距使用 MSO 属性 `mso-margin-top-alt`,这种是可以明确通过 `margin-top` 转换适配
如:Outlook 对于 white-space: pre-wrap 样式是不支持渲染的,但在 W3C 下是能支持,这就导致若清洗该样式,导致渲染变化(无法确认是否属于原作者原意)
white-space: pre-wrap
1.0: Asdfsadfsdafsdafdsafasdf 1.15: sadfasdfsdafdsfsdf 1.5: asdfsadfasdfsdafasdf 2.0: asfdasdfasdfasdfdf 2.5: sadfasdfasdsdafsa 3.0: sadfadfadfadfsdafsdaf
1.0: Asdfsadfsdafsdafdsafasdf
1.15: sadfasdfsdafdsfsdf
1.5: asdfsadfasdfsdafasdf
2.0: asfdasdfasdfasdfdf
2.5: sadfasdfasdsdafsa
3.0: sadfadfadfadfsdafsdaf