1

我正在构建一个chrome扩展,我需要从网页中获取和解析一些html。决定使用jQuery的。解析具有内联事件处理函数的HTML

$(htmlString).find(".some-table"); 

问题是我在运行此代码时收到以下警告。

拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:“script-src”self'chrome-extension-resource:“。 “内联不安全”关键字,散列('sha256 -...')或一个随机数('nonce -...')是启用内联执行所必需的。

看起来“htmlString”包含一些内联事件处理程序,在解析它时,chrome会抛出此警告。
我无法控制“htmlString”里面的内容,只需要从中检索一些信息即可。有没有更好的方法来做到这一点?

+0

这是否阻止它工作,或者它只是一个警告? – 2015-02-24 14:08:57

+0

您确定此操作_specifically_导致他? – Xan 2015-02-24 14:23:44

+0

@JuanMendes这些只是警告(相应地修改问题)。 – 2015-02-24 17:46:08

回答

0

使用明确的$.parseHTML()。引用文档:

接受HTML字符串的大多数jQuery API都将运行包含在HTML中的脚本。 jQuery.parseHTML不会在解析的HTML中运行脚本,除非keepScripts显式为true。

但是,即使这样做也不安全。

但是,在大多数环境中仍可以间接执行脚本,例如通过<img onerror>属性。来电者应该知道这一点,并通过清除或转义来自诸如URL或Cookie之类来源的任何不可信输入来防范。

因此,虽然它可能有助于特定的输入,但您应该考虑是否显式创建DOM节点是您真正需要的。它可能会创建各种讨厌的边缘案例。