从Firefox扩展中清除innerHTML的最佳方法

时间:2017-08-08 23:20:15

标签: javascript jquery firefox-webextensions

我正在运行web-ext lint并收回一些错误:

  

UNSAFE_VAR_ASSIGNMENT

     

对innerHTML的不安全分配

     

由于安全性和性能问题,可能无法使用尚未充分消毒的动态值进行设置。这可能导致安全问题或相当严重的性能下降。

有问题的代码基本上是这样做的:

var html = '<style>body { margin: 0; } iframe { border: none; }' +
           '</style><iframe src="' + URL.createObjectURL(blob) +
           '" width="100%" height="100%"></iframe>';
document.documentElement.innerHTML = html;

我不是一个很大的JS开发人员,所以我理解这里的安全漏洞,但我真的不知道什么是让AMO和linter高兴的最佳解决方案。我想我需要将上面的字符串转换成一堆命令来代替节点吗?

1 个答案:

答案 0 :(得分:3)

是的,那会更安全。对于上面的例子,它将是

var css = 'body { margin: 0; } iframe { border: none; }';
var style = document.createElement('style');
style.appendChild(document.createTextNode(css));
document.body.appendChild(style);

var frame = document.createElement('iframe');
frame.width = "100%";
frame.height = "100%";
frame.src = URL.createObjectURL(blob);
document.body.appendChild(frame);

要在有多种方法之前清除文档正文,请参阅Remove all content using pure JS