用 JavaScript 从 HTML DOM 树中剥离 JavaScript

Strip JavaScript from HTML DOM Tree with JavaScript

如何从所有 JavaScript 次事件中清理一棵 HTML DOM 树,意思是:on(click|mouseover|etc)href:javascript...<script>以及(内联)JavaScript 的所有其他可能变体,同时使用 JavaScript?

例如:我希望用户上传他们的 HTML 文件,复制 <body> 标签中的内容并将其插入到我的一个页面中。我不想在他们的 HTML 文件中允许 JavaScript。我可以使用 <iframe sandbox>,但我想知道是否有其他方法。

以下使用 Element.attributes 集合删除内联 on 处理程序和包含单词 "javascript" 的属性 – 不影响其他 DOM 属性。

function disableInlineJS() {
  var obj = document.querySelectorAll('*');

  for (var i = 0; i < obj.length; i++) {
    for (var j in obj[i].attributes) {
      var attr = obj[i].attributes[j];
      if ((attr.name && attr.name.indexOf('on') === 0) ||
          (attr.value && attr.value.toLowerCase().indexOf('javascript') > -1)
         ) {
        attr.value= '';
      }
    }
  }
}
<button onclick="disableInlineJS()">Disable inline JavaScript</button><hr>

<div onmouseover="this.style.background= 'yellow';" ONmouseout="this.style.background= '';" style="font-size:25px; cursor: pointer;">
  Hover me
  <br>
  <a href="javAsCriPT:alert('gotcha')" style="font-weight:bold">Click me!</a>
  <br>
  <a href="http://example.com">Example.com!</a>
</div>
<button onclick="alert('gotcha')">Me, me!</button>

我认为没有办法在 script 元素有机会 运行 之前删除它们。