我想禁用<script>
标记。这是我的代码,但它不起作用。
document.getElementsByTagName('script').disabled = true;
答案 0 :(得分:10)
实际上,可以通过更改&#34; type&#34;来禁用执行。属性:
<script type="text/javascript">
alert("I will alert you");
</script>
<script type="application/json">
alert("And I will keep silent");
</script>
<script>
alert("I will alert too");
</script>
答案 1 :(得分:9)
无法完成......一旦DOM渲染器呈现它,脚本标记就会进行评估,因此在病房之后获取一个句柄将不会做太多。
答案 2 :(得分:1)
抱歉,您无法停用<script>
元素。
答案 3 :(得分:0)
据我了解,您从数据库中获取了一些HTML代码并将其添加到页面中。 如果是这样,您可以编写服务器端功能,使用简单的Regex在脚本周围添加HTML Notes,然后用户保存更改,您需要删除注释。
如果您在将其添加到Dom之前添加了要添加的HTML字符串,也可以在Javascript中执行此操作。
答案 4 :(得分:0)
删除DOM节点上的所有事件将阻止大多数JavaScript执行(此处为document
):
for (key in getEventListeners(document)) {
getEventListeners(document)[key].forEach(function(c) {
c.remove()
})
}
答案 5 :(得分:0)
您可以禁用脚本元素。有两种方法:
您可以指定不同脚本类型,如其他已列出的。这是为我工作的人:
//loop through all script tags on page
$('script').each(function(){
var scripthtml = $(this).html();
$(this).replaceWith('<script type="text/gzip">' + scripthtml + '</script>');
});
所有正式脚本类型都可以在这里找到:iana.org
第二种方法是简单的if语句:
//loop through all script tags on page
$('script').each(function(){
var scripthtml = $(this).html();
$(this).replaceWith('<script>if (1==0){' + scripthtml + '}</script>');
});
if语句将始终为false,因此script标记内的任何内容均不会执行。但是script标记内的所有function()都将有效。
在此替换 javascript等效:
//get script and html
var yourscripttag = document.getElementById('yourscripttagID');
var scripthtml = 'if (1==0){' + yourscripttag.innerHTML + '}';
//remove script
yourscripttag.remove();
//create new script element
var newscript=document.createElement('script');
newscript.type='text/javascript';
//insert html in new script tag
newscript.appendChild(document.createTextNode(scripthtml));
//insert new script tag into head
document.getElementsByTagName('head').item(0).appendChild(newscript);
答案 6 :(得分:0)
您可以破解它。使用另一个脚本来执行...。
node.parentNode.replaceChild(
document.createComment(node.outerHTML.slice(1,-1)
.replace(/--/g, '\\-\\-')), node);
其中节点是您的脚本节点/元素。替换双破折号是为了防止浏览器抱怨不兼容的注释标记。
然后,如果要启用它,只需做相反的注释。替换并用<和>括起来。但是您可能需要跟踪修改后的脚本节点,因为修改后的脚本节点将成为注释,因此查询较少。
答案 7 :(得分:-1)
内联Java具有安全风险。但这可以通过简单的解决方案来缓解。
只需用