0

在 Firefox 扩展中,我们使用parseFragment文档)将 HTML 字符串(从 3rd 方服务器接收)解析为DocumentFragmentMozilla 要求的经过清理的字符串。唯一的问题是,解析器删除了我们需要的所有属性,例如class属性。

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

PS 我知道在 Gecko 14.0 中,他们用另一个支持清理参数的函数替换了这个函数。但是 Gecko < 14.0 怎么办?

4

1 回答 1

1

不,白名单是硬编码的,无法调整。但是,该class属性在白名单中,应该保留,您可能是指该style属性?如果您需要自定义行为,则必须使用不同的解决方案(例如可以在 Firefox 12 中解析 HTML 文档的DOMParser )。

对于较旧的 Firefox 版本,您可以在DOMParser那里解析 XHTML 数据。如果你真的有 HTML,那么我只知道一种解析它的方法,而不立即将它插入到文档中(这可能会导致各种安全问题):range.createContextualFragment()。你需要一个 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网络不再支持。

于 2012-04-17T19:00:17.433 回答