如何在Firefox扩展中使用parseFragment保留属性

问题描述:

在Firefox扩展中,我们使用parseFragmentdocumentation)将一串HTML(从第三方服务器接收)解析为符合Mozilla要求的消毒DocumentFragment。唯一的问题是,解析器删除我们需要的所有属性,例如class属性。如何在Firefox扩展中使用parseFragment保留属性

是否有可能以某种方式保留class属性,同时用parseFragment解析HTML?

P.S.我知道在Gecko 14.0中,他们replaced这个功能与另一个支持消毒参数的功能。但是如何处理Gecko < 14.0?

不,白名单是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