Javascript 如何在firefox插件sdk 1.10 main.js中使用NSIPasseRutils?

Javascript 如何在firefox插件sdk 1.10 main.js中使用NSIPasseRutils?,javascript,dom,firefox-addon,firefox-addon-sdk,Javascript,Dom,Firefox Addon,Firefox Addon Sdk,我最近提交的Firefox加载项站点(基于Firefox加载项SDK 1.10)被拒绝,因为我没有对我使用的输入进行消毒,并被建议删除 我在该页面中找到了函数parseHTML(doc、html、allowStyle、baseURI、isXML)。我把它改成: 函数解析html(doc、html、allowStyle、baseURI、isXML){ var parser=Cc[“@mozilla.org/parserutils;1”].getService(Ci.nsipserutils); v

我最近提交的Firefox加载项站点(基于Firefox加载项SDK 1.10)被拒绝,因为我没有对我使用的输入进行消毒,并被建议删除

我在该页面中找到了函数
parseHTML(doc、html、allowStyle、baseURI、isXML)
。我把它改成:

函数解析html(doc、html、allowStyle、baseURI、isXML){
var parser=Cc[“@mozilla.org/parserutils;1”].getService(Ci.nsipserutils);
var f=parser.parseFragment(html,allowStyle?parser.sanitizeralowStyle:0,
!!isXML、baseURI、doc);
返回f;
}
其中的第一个参数被称为文档元素。我不知道那应该是什么?我尝试了
document.createDocumentFragment()
,但出现了“ReferenceError:document未定义”错误。有人能帮我怎么调用这个函数吗

函数返回一个
nsIDOMDocumentFragment
。如何将其转换回字符串


更新:

根据@zer0的建议,我使用了:

var parser=Cc[“@mozilla.org/parserutils;1”].getService(Ci.nsipserutils);
var sanitizedHTML=parser.sanitize(html,标志);
但这违背了我想做的事情的目的。例如:


.b{
颜色:绿色;
}
示例文本。没有风格
你好,恶意代码
外部风格

内部风格

内联样式



剪辑于2012年10月6日晚上7:37:39从
转换为:


.b{
颜色:绿色;
}
示例文本。没有风格
外部风格

内部风格

内联样式

由于这会剥离外部超链接和CSS,因此无法实现附加组件本身的目的。我想要的只是删除脚本:


.b{
颜色:绿色;
}
示例文本。没有风格
外部风格

内部风格

内联样式



剪辑于2012年10月6日晚上7:37:39从
有人能解释一下吗

其中的第一个参数被称为文档元素。我不知道那应该是什么

你不需要那个。只需使用方法,该方法只需获取一个字符串作为输入,并将经过消毒的版本作为输出返回:

var parser = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils);
var sanitizedHTML = parser.sanitize(html, flags);

检查“常量”部分上方的链接,查看场景中需要使用哪些标志。

删除指向外部样式的链接的原因是:无法验证外部样式,它们可能很危险(特别是,
-moz绑定
可用于运行代码)。另外,假设您可以将HTML代码放在以下相对链接不安全的位置(例如Thunderbird中的邮件消息)。然而,绝对链接总是好的

您可能想做的是预处理HTML代码以消除这些问题—解决外部样式的相对链接和内联引用。大概是这样的:

//将HTML代码解析为临时文档
var doc=Cc[“@mozilla.org/xmlextas/domparser;1”]
.createInstance(Ci.nsIDOMParser)
.parseFromString(html,“text/html”);
//确保所有链接都是绝对链接
对于(变量i=0;i

请注意,我使用了同步XMLHttpRequest来下载样式表内容-这是为了简单起见,您的最终代码应该使用异步下载(最有可能通过
request
module),这不会挂起用户界面。

Hi我在catch语句中得到一个错误,ReferenceError:未定义XMLHttpRequest。我尝试使用请求API(),但速度太慢了。。。大多数情况下,它会挂起:(@JayarathinaMadharasan:Add-on SDK应该使用
request
模块。如果您在使用它时遇到问题,那么您应该创建一个新问题-通常它既不“慢”也不是不稳定。非常感谢您的指导。我根据您的代码使其工作。特别是制作所有指向relative.oops的链接的代码。抱歉,我不知道:(…但现在做了…非常感谢…:)信息:在解析之前,请确保所有链接都是绝对的,否则解析器将删除所有链接。