2015-04-14 43 views
0

我正在構建IMAP Webmail客戶端。問題是HTML電子郵件可能包含影響客戶端佈局/風格的CSS。處理IMAP HTML電子郵件時,如何隔離串聯CSS?

該應用程序前端基於AngularJS構建。

一個可能的解決方案是使用幀/ iframe。這些問題是你必須提供一個src屬性。此內容以json數據到達瀏覽器。我可能會設置後端爲每個電子郵件提供一個URL,但這意味着對服務器的更多請求。

看着Gmail的DOM(例如)我沒有看到任何框架的使用,所以我推斷必須有替代技術。

+1

很多時候你聽到有人說「爲什麼這些?%的電子郵件客戶端支持CSS ?!」。有興趣聽到圍欄另一邊的人。 –

回答

1

我參與了一個小型項目,試圖在這裏描述你正在做的事情,儘管原因不同。這是一項艱苦的工作,最終我們放棄了,並且只是使用iframe解決方案。

我們嘗試的路線是類似的SpamAssassin:

  1. 我們僅通過提取<body>innerHTML刪除整個<head>
  2. 我們使用DOM解析器移除了任何嵌入式樣式標籤。
  3. 我們對任何匹配<...float:left...>的東西都做了正則表達式(argh the horror!),並用floatXXX:left代替它。我們爲每個我們希望「隔離」的CSS屬性做了這個。

問題是,雖然我們能夠'隔離'CSS,但它使大部分電子郵件無法使用。格式化僅CSS(例如font-weight)在交火中陷入困境,並且正在替換的正則表達式模式的永無止境的列表使其變得非常慢。

我們試圖通過在頁面頂部使用!important規則放置大量默認值,然後對任何內嵌的!important規則進行調整來簡化此操作。這是雅虎採取的方法。這改善了性能,但我們仍然使太多的電子郵件難以閱讀。

我相信谷歌的方法對於做一個逆填充是很重要的 - 它們取代了瀏覽器的方式,比如說用自己的方法處理浮動。然而,這超出了我們的能力,我們甚至沒有嘗試過。

最終,iframe解決方案非常快速實施,並且可能足夠快以滿足用戶的需求。您現在可以隨時使用此功能,稍後再更新到更復雜的解決方案。他們還具有額外的優勢,即他們可以獲得非常全面的CSS支持。我唯一會禁用iframed內容的是JavaScript,它可能會以CSS的方式破壞父母,並且也會非常不安全。

+0

有趣!你用什麼技術來動態調整iframe的大小?或者你是否將它設置爲固定寬度/高度? – geoidesic