如何使用JavaScript </script>禁用<script>元素

时间:2012-03-24 08:43:05

标签: javascript dom

我想禁用<script>标记。这是我的代码,但它不起作用。

document.getElementsByTagName('script').disabled = true;

8 个答案:

答案 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>

http://jsfiddle.net/r6c0x0sc/

答案 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具有安全风险。但这可以通过简单的解决方案来缓解。

只需用

input.replace("<script>", "&lt;script&gt;")
     .replace("</script>", "&lt;&#47;script&gt;")

如果您的用例是这样的话,这将起作用:

  1. 如果要禁用内联脚本,例如

  2. 如果您不想从显示中删除内容(脚本标签数据)。