我想执行一个动态添加到页面的脚本(通过innerHTML
)我发现了这个:
how to execute ajax output script
哪个很近,但没有雪茄。我在我的AJAX响应中得到了其中一个(以及其他内容):
<link rel=StyleSheet href="/my/css/file.css" type="text/css"/>
<h1>Some header</h1>
<div>Some text</div>
<ul><li>Some text</li><li>Some Text</li></ul>
<script src='my/js/file.js'></script>
我试图在将它附加到我的容器元素之后(通过innerHTML
)来评估它:
scripts = mycontainer.querySelectorAll('script');
for (k=0;k<scripts.length;k++){
eval(scripts[k]);
}
但无济于事。有任何想法吗?请没有图书馆! (也不需要后退,只需要大多数现代浏览器。)
CSS加载就好了。 JS文件存在并被正确引用。
答案 0 :(得分:0)
没有你的代码,我只会做一些假设。
scriptlist.php
<?php
//get script list somehow.
$script_list = array('my/js/file1.js', 'my/js/file2.js', 'my/js/file3.js');
echo json_encode($script_list);
?>
page.html中
function ajaxRequest(){
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
for (var i=0; i<activexmodes.length; i++){
try{
return new ActiveXObject(activexmodes[i])
}
catch(e){
//suppress error
}
}
}
else if (window.XMLHttpRequest) // if Mozilla, Safari etc
return new XMLHttpRequest()
else
return false
}
var mygetrequest=new ajaxRequest()
mygetrequest.onreadystatechange=function(){
if (mygetrequest.readyState==4){
if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){
var scripts = eval("("+mygetrequest.responseText+")") //retrieve result as an JavaScript object
var headID = document.getElementsByTagName("head")[0];
for (k=0;k<scripts.length;k++){
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = scripts[k];
headID.appendChild(newScript);
}
}
else{
alert("An error has occured making the request")
}
}
}
mygetrequest.open("GET", "scriptlist.php", true)
mygetrequest.send(null)
参考。使用:
答案 1 :(得分:0)
除非有人想出更好的方法......
我将最终使用AJAX调用来获取每个脚本src,并评估返回值。我稍后会在这里发布相关代码。