用 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
元素有机会 运行 之前删除它们。
如何从所有 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
元素有机会 运行 之前删除它们。