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

时间:2012-04-17 17:15:00

标签: firefox-addon

在Firefox扩展中,我们使用parseFragmentdocumentation)将一串HTML(从第三方服务器接收)解析为Mozilla所需的已清理的DocumentFragment。唯一的问题是,解析器会删除我们需要的所有属性,例如class属性。

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

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

1 个答案:

答案 0 :(得分:1)

不,白名单为hardcoded且无法调整。但是,class属性位于白名单中并且应该保留,您可能意味着style属性?如果您需要自定义行为,则必须使用其他解决方案(例如可以在Firefox 12中解析HTML文档的DOMParser)。

对于较旧的Firefox版本,您可以在那里用DOMParser解析XHTML数据。如果您确实拥有HTML,那么我只知道一种方法来解析它而不立即将其插入到文档中(这可能会导致各种安全问题):range.createContextualFragment()。如果您没有HTML文档,则需要一个HTML文档 - 隐藏的<iframe>加载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