繁体   English   中英

你如何禁用<script> elements using JavaScript

[英]How do you disable <script> elements using JavaScript

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

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

实际上,可以通过更改“type”属性来禁用执行:

<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/

无法完成...脚本标签在 DOM 渲染器渲染后立即评估,因此在 wards 之后处理它不会做太多事情。

您可以禁用脚本元素。 有几种方法:

您可以指定与其他脚本类型不同的脚本类型 这是对我有用的一个:

//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,因此脚本标记内的任何内容都不会执行。 但是,脚本标记内的所有函数() 都将有效。

继承人的javascript 相当于replaceWith:

//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);

据我了解,您正在从数据库中获取一些 HTML 代码并将其添加到页面中。 如果是这样,您可以编写一个服务器端函数,该函数将使用简单的正则表达式在脚本周围添加 HTML 注释,然后用户保存更改,您将需要删除注释。

如果您在将 HTML 字符串添加到 Dom 之前想要添加它,您也可以在 Javascript 中执行此操作。

删除 DOM 节点上的所有事件将阻止大部分 JavaScript 执行(此处针对document ):

for (key in getEventListeners(document)) {
  getEventListeners(document)[key].forEach(function(c) {
    c.remove()
  })   
}

你可以破解它。 使用另一个脚本来做一个......

node.parentNode.replaceChild(
  document.createComment(node.outerHTML.slice(1,-1)
    .replace(/--/g, '\\-\\-')), node);

其中 node 是您的脚本节点/元素。 替换双破折号是为了防止浏览器抱怨评论标签不合规。

然后,如果您想启用它,只需执行反向 comment.replace 并用 < 和 > 括起来。 但是您可能需要跟踪修改后的脚本节点,因为在它成为注释之后,它的查询能力就变差了。

抱歉,您无法禁用<script>元素。

内联 Java 存在安全风险。 但这可以通过一个简单的解决方案来缓解。

只需将 的任何实例替换为 <script&rt; 之类的东西; 因此它不会呈现为标签,而是会以 HTML 格式输出,看起来就像是标签一样。

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

如果您的用例类似于:

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

    <script> alert("你好"); </脚本>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM