在Firefox扩展中,我们使用parseFragment
(documentation)将一串HTML(从第三方服务器接收)解析为Mozilla所需的已清理的DocumentFragment
。唯一的问题是,解析器会删除我们需要的所有属性,例如class
属性。
在使用class
解析HTML时,是否可能以某种方式保留parseFragment
属性?
P.S。我知道在Gecko 14.0中他们replaced这个功能与另一个支持消毒参数的功能。但是如何处理Gecko< 14.0?
答案 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
。