我被要求通过Mozilla附加评论者通过名为parseHTML
的函数将一些HTML从我的服务器发送到我的Firefox附加组件。有关的方法记录在中。安全使用远程HTML
但是在我的内容脚本中,typeof parseHTML == "undefined"
。我相信这是因为我的加载项是使用附加SDK而不是XUL构建的。
使用SDK构建的加载项无法访问此方法是正确的吗? SDK中是否有等效的方法?
我被要求通过Mozilla附加评论者通过名为parseHTML
的函数将一些HTML从我的服务器发送到我的Firefox附加组件。有关的方法记录在中。安全使用远程HTML
但是在我的内容脚本中,typeof parseHTML == "undefined"
。我相信这是因为我的加载项是使用附加SDK而不是XUL构建的。
使用SDK构建的加载项无法访问此方法是正确的吗? SDK中是否有等效的方法?
当然这个函数是未定义的 - 它不是一些全局定义的帮助器,而是您必须在代码中定义的东西(如代码示例中所示)。它使用您需要访问的nsIParserUtils
interface。在基于SDK扩展你会使用chrome authority为:
var {Cc, Ci} = require("chrome");
var parser = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils);
var sanitized = parser.sanitize(html, parser.SanitizerAllowStyle);
如果你是一个内容脚本,那么你不能使用,当然 - 你需要的HTML代码发送到附加,消毒它在那里并将其发送回内容脚本。虽然这是一个选项,但您可能需要考虑其他可能性,例如首先不使用innerHTML
(如果您只需要在元素上设置一些文本,那么textContent
是安全的选择)。
附注:虽然XUL教程相当古老,但这一特定页面仅在一年前被导入到MDN中 - 并且自从根据历史记录定期更新之后。所以它是最新的,只是不意味着明确的附加SDK(像大多数MDN文章实际上)。
当然这个函数没有定义 - 它的源代码在你链接的教程中被引用。您真正需要的是[nsIParserUtils](https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIParserUtils),这是您的加载项代码(而非内容脚本)可以访问的内容。那么,HTML代码是否会通过您的附加代码?请注意,虽然XUL学校教程是旧的 - 您链接到的特定文档是非常新的和非常新的。 –
不,它是从内容脚本中的JS模板构建的。这听起来像我不得不在内容脚本的运行时编译模板,发送消息给附加代码,传递html字符串。清理html字符串,然后将其传递回内容脚本进行渲染?听起来很有趣:-) –
或者也许改变模板机制(不知道你在那里使用什么),以便它不处理原始的HTML代码?如果你可以使用'.textContent'来填充动态数据,那么它将是安全的,没有任何消毒。 –