我有一个div标签,通过ajax调用填充了脚本,但是脚本没有执行。
有没有办法让脚本执行?
.html
方法,它会解析脚本标签并对其进行评估:$("div").html('<script type="text/javascript">alert("This should work")</script>');
如果不能使用jQuery,你可以使用以下方法之一自己编写代码:(1)使用正则表达式,或者(2)解析DOM树并查找脚本标签。(#2是jQuery的实现方式)
将内容与代码分离始终是一个好主意。通过 AJAX 加载内容,通过插入 <script>
标签加载代码。如果您正在使用 jQuery,则可以使用 $.getScript()
动态加载脚本。
document.body.innerHTML+="<script>alert(1)</scr"+"ipt>";
你需要像这样使用DOM函数编写代码
var tag = document.createElement("script");
tag.innerHTML="alert(1)";
document.body.appendChild(tag); //can be append to any object other than body
或者更好地使用jQuery
eval
;如果包括script标签,你可以使用我在帖子中提供的示例,并将document.body
更改为你的div标签,然后添加到那里。 - YOUmake a callback after ajax load completes like:
function load_scripts(element_id) {
if (!document.getElementById) return;
var elmt = document.getElementById(element_id);
if (!elmt) return;
var scripts = elmt.getElementsByTagName('script');
if (!scripts) return;
var file = null;
var fileref = null;
for (var i = 0; i < scripts.length; i++) {
file = scripts[i].getAttribute('src');
if (file) {
fileref = document.createElement('script');
fileref.setAttribute('type', 'text/javascript');
fileref.setAttribute('src', file);
document.getElementsByTagName('head').item(0).appendChild(fileref);
} else {
eval(scripts[i].innerHTML);
}
}
}
ScriptManager.RegisterClientScriptBlock
来添加这些脚本。框架会在将它们插入到DOM中时专门发送,以便客户端可以对其进行eval
操作。 - Crescent Fresh