用JavaScript从HTML DOM树中剥离JavaScript

Strip JavaScript from HTML DOM Tree with JavaScript

本文关键字:JavaScript 剥离 HTML DOM      更新时间:2023-09-26

如何从所有JavaScript事件中清除HTML DOM树,即:on(click|mouseover|etc), href:javascript..., <script>和所有其他可能的(内联)JavaScript变体,同时使用JavaScript?

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

下面使用元素。属性集合,删除内联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元素有机会运行之前删除它们。