Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在构建HTML时剥离JavaScript代码?_Javascript_Jquery_Html_Security - Fatal编程技术网

如何在构建HTML时剥离JavaScript代码?

如何在构建HTML时剥离JavaScript代码?,javascript,jquery,html,security,Javascript,Jquery,Html,Security,我正试图解析一些HTML来查找其中的图像 例如,我创建了一个动态的div,并对标记进行如下解析: var tmpDiv = document.createElement("DIV"); tmpDiv.innerHTML = html; HTML应该是无脚本的,但也有例外,一个代码段在图像标记下有以下代码: <img src=\"path" onload=\"NcodeImageResizer.createOn(this);\" /> 通过创建一个tempdiv“onload

我正试图解析一些HTML来查找其中的图像

例如,我创建了一个动态的
div
,并对标记进行如下解析:

var tmpDiv = document.createElement("DIV");
tmpDiv.innerHTML = html;
HTML应该是无脚本的,但也有例外,一个代码段在图像标记下有以下代码:

<img src=\"path" onload=\"NcodeImageResizer.createOn(this);\" /> 

通过创建一个temp
div
“onload”函数调用自身并创建了一个JavaScript错误

在构建HTML元素时,是否有必要告诉浏览器忽略JavaScript代码

编辑:
我忘了在后面提到,我想在文档中的
div
中显示这个HTML,所以我正在寻找一种忽略脚本而不使用字符串操作的方法


谢谢

使用jquery,您可以非常轻松地做到这一点,如下所示:

var tmpDiv = document.createElement("DIV");
tmpDiv.innerHTML = html;
编辑:

html


实现这一点的一种方法是循环通过div的子级并删除所需的事件处理程序

考虑以下几点:

我们有一个包含一些HTML的变量,该变量反过来又有一个内联的
onload
事件处理程序:

var html = "<img src=\"http://www.puppiesden.com/pics/1/doberman-puppy5.jpg\" 
alt=\"\" onload=\"alert('hello')\" />"
下面是一个工作示例:

更新

OP要求同时删除其他事件。据我所知,无法自动删除所有事件,但您可以根据需要将每个事件设置为
null

$(newDiv).children().each(function(){
    this.onload = null;
    this.onchange = null;
    this.onclick = null;
});

如果onload仍然相同,则可以使用
tmpDiv.innerHtml=html.replace('onload=“NcodeImageResizer.createOn(this);”,“”)
这将解决这个特定的情况,但我正在寻找一个通用的解决方案,它将涵盖所有其他情况。每一个其他情况是什么?所有onload处理程序?所有什么?所有其他情况是从HTML隐式调用的脚本(而不是java脚本标记中的脚本)谢谢,但它对我不起作用,它与创建div的作用相同,我忘了提到我想稍后显示这个HTML,所以我正在寻找一个不同的解决方案更新。我很确定jquery在解析时可能会删除
标记,但问题是,在我的代码中根本没有任何脚本标记。感谢你的帮助,伙计,这可能会起到作用,但是当我显示HTML时,可能会有大量其他事件触发脚本有办法删除所有脚本吗来自对象的事件?
$(html\U字符串).children().die().unbind().removeAttr(“onclick”).removeAttr(“onload”)
等等。谢谢,正如我在最近给伊利亚的评论中所写的那样,我正在寻找一种删除所有事件的方法,因为我的最终目标是显示此HTML和脚本可以在各种事件中触发。你可以按你喜欢的方式删除任意多个事件。没有通用的方法删除所有事件。你只需设置你关注的每个事件即可rned即将为空。哦,太糟糕了,我想我必须手动编写它们。再次感谢。
var newDiv = document.createElement("div");
$(newDiv).html(html);
$(newDiv).children().each(function(){this.onload = null});
$(newDiv).children().each(function(){
    this.onload = null;
    this.onchange = null;
    this.onclick = null;
});