2012-04-17 80 views
0

在Firefox擴展中,我們使用parseFragmentdocumentation)將一串HTML(從第三方服務器接收)解析爲符合Mozilla要求的消毒DocumentFragment。唯一的問題是,解析器刪除我們需要的所有屬性,例如class屬性。如何在Firefox擴展中使用parseFragment保留屬性

是否有可能以某種方式保留class屬性,同時用parseFragment解析HTML?

P.S.我知道在Gecko 14.0中,他們replaced這個功能與另一個支持消毒參數的功能。但是如何處理Gecko < 14.0?

回答

1

不,白名單是hardcoded,無法調整。但是,class屬性位於白名單中,應保留,您可能意思是style屬性?如果您需要自定義行爲,您將不得不使用不同的解決方案(如DOMParser,它可以解析Firefox 12中的HTML文檔)。

至於較早的Firefox版本,您可以在那裏使用DOMParser解析XHTML數據。如果您確實擁有HTML,那麼我只知道一種解析方法,而不立即將其插入到文檔中(這可能會導致各種安全問題):range.createContextualFragment()。你需要一個HTML文檔,如果你沒有 - 一個隱藏的加載about:blank也可以。這是它是如何工作的:

// Get the HTML document 
var doc = document.getElementById("dummyFrame").contentDocument; 

// Parse data 
var fragment = doc.createRange().createContextualFragment(htmlData); 

// Sanitize it 
sanitizeData(fragment); 

這裏清理數據是您自己的責任。您可能希望將您的清理工作放在我上面鏈接的Mozilla白名單上 - 刪除不在該列表中的所有標記和屬性,並確保檢查鏈接。 style屬性是一個特殊情況:它曾經是不安全的,但恕我直言不再給予,不再支持-moz-binding

+0

謝謝你的回答。我會用'class'重新檢查(我認爲它已被刪除,但現在不確定)......無論如何,是的,'style'也很重要。 FF12不是一個選項,因爲我需要支持FF4 +。 – gakhov 2012-04-17 22:25:10

+0

@gakhov:我更新了我的答案。 – 2012-04-18 05:51:03

+0

好吧,現在我明白了。那麼如果我從我信任的源(我的服務器生成該html)獲取HTML並將其放入帶有'innerHTML'的DOM中,那麼怎麼辦?它是否違反了擴展中的安全性(我的意思是,如果它與編寫自定義清理程序相同的安全級別,或Mozilla需要確定,並且他們需要查看我如何清理數據)? – gakhov 2012-04-18 09:23:09