处理 IMAP HTML 电子邮件时,如何在线隔离 CSS?
When processing IMAP HTML emails, how can I quarantine in-line CSS?
我正在构建一个 IMAP 网络邮件客户端。问题是 HTML 电子邮件可能包含 CSS,这会影响客户端的布局/样式。
应用程序前端基于 AngularJS 构建。
一种可能的解决方案是使用框架/iframe。这些的问题是您必须提供 src 属性。此内容作为 json 数据到达浏览器。我可能会将后端设置为为每封电子邮件提供 URL,但这意味着对服务器的请求更多。
查看 gmail DOM(例如)我没有看到任何框架的使用,所以我推断一定有替代技术。
我参与了一个小型项目,该项目试图实现您在此处描述的内容,但出于不同的原因。辛苦了,最后放弃了,直接用iframe解决了。
我们尝试的路由与 SpamAssassin 类似:
- 我们通过提取
<body>
的 innerHTML
来删除整个 <head>
。
- 我们使用 DOM 解析器删除了所有嵌入的样式标签。
- 我们对匹配
<...float:left...>
的任何内容进行了正则表达式(恐怖!),并通过将其替换为 floatXXX:left
对其进行了修改。我们为每个 CSS 属性 我们想要 'quarantine'.
问题很简单,虽然我们能够 'quarantine' CSS,但大部分电子邮件都无法使用。仅格式化 CSS(例如 font-weight
)陷入了交火,要替换的永无止境的正则表达式模式列表使其速度非常慢。
我们试图通过在页面顶部使用 !important
规则放置大量默认值来简化这一点,然后修改任何内联 !important
规则。这就是雅虎采用的方法。这提高了性能,但我们继续使太多电子邮件无法读取。
我相信 Google 的方法对于反向 polyfill 来说是必不可少的 - 它们取代了浏览器的方式,比如说,用自己的方式处理浮点数。然而,这超出了我们的能力,我们甚至没有尝试。
最后,iframe 解决方案的实施速度非常快,而且可能很快就能满足用户的需求。您现在可以随时推出,并在以后更新到更复杂的解决方案。他们还有一个额外的优势,那就是他们得到了相当全面的 CSS 支持。我唯一要在 iframed 内容中禁用的是 JavaScript,它会以 CSS 无法做到的方式对父级造成严重破坏,而且会非常不安全。
我正在构建一个 IMAP 网络邮件客户端。问题是 HTML 电子邮件可能包含 CSS,这会影响客户端的布局/样式。
应用程序前端基于 AngularJS 构建。
一种可能的解决方案是使用框架/iframe。这些的问题是您必须提供 src 属性。此内容作为 json 数据到达浏览器。我可能会将后端设置为为每封电子邮件提供 URL,但这意味着对服务器的请求更多。
查看 gmail DOM(例如)我没有看到任何框架的使用,所以我推断一定有替代技术。
我参与了一个小型项目,该项目试图实现您在此处描述的内容,但出于不同的原因。辛苦了,最后放弃了,直接用iframe解决了。
我们尝试的路由与 SpamAssassin 类似:
- 我们通过提取
<body>
的innerHTML
来删除整个<head>
。 - 我们使用 DOM 解析器删除了所有嵌入的样式标签。
- 我们对匹配
<...float:left...>
的任何内容进行了正则表达式(恐怖!),并通过将其替换为floatXXX:left
对其进行了修改。我们为每个 CSS 属性 我们想要 'quarantine'.
问题很简单,虽然我们能够 'quarantine' CSS,但大部分电子邮件都无法使用。仅格式化 CSS(例如 font-weight
)陷入了交火,要替换的永无止境的正则表达式模式列表使其速度非常慢。
我们试图通过在页面顶部使用 !important
规则放置大量默认值来简化这一点,然后修改任何内联 !important
规则。这就是雅虎采用的方法。这提高了性能,但我们继续使太多电子邮件无法读取。
我相信 Google 的方法对于反向 polyfill 来说是必不可少的 - 它们取代了浏览器的方式,比如说,用自己的方式处理浮点数。然而,这超出了我们的能力,我们甚至没有尝试。
最后,iframe 解决方案的实施速度非常快,而且可能很快就能满足用户的需求。您现在可以随时推出,并在以后更新到更复杂的解决方案。他们还有一个额外的优势,那就是他们得到了相当全面的 CSS 支持。我唯一要在 iframed 内容中禁用的是 JavaScript,它会以 CSS 无法做到的方式对父级造成严重破坏,而且会非常不安全。