如何在Firefox扩展中使用parseFragment保留属性
问题描述:
在Firefox扩展中,我们使用parseFragment
(documentation)将一串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
。
谢谢你的回答。我会用'class'重新检查(我认为它已被删除,但现在不确定)......无论如何,是的,'style'也很重要。 FF12不是一个选项,因为我需要支持FF4 +。 – gakhov 2012-04-17 22:25:10
@gakhov:我更新了我的答案。 – 2012-04-18 05:51:03
好吧,现在我明白了。那么如果我从我信任的源(我的服务器生成该html)获取HTML并将其放入带有'innerHTML'的DOM中,那么怎么办?它是否违反了扩展中的安全性(我的意思是,如果它与编写自定义清理程序相同的安全级别,或Mozilla需要确定,并且他们需要查看我如何清理数据)? – gakhov 2012-04-18 09:23:09