0

我想执行一个动态添加到页面的脚本(通过innerHTML)我发现了这个:

如何执行ajax输出脚本

这是接近,但没有雪茄。我在我的 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 文件存在并且被正确引用。

4

2 回答 2

0

没有你的代码,我只会做一些假设。

脚本列表.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)

参考。用过的。:

于 2012-11-05T17:38:44.667 回答
0

除非有人想出更好的方法...

我最终将使用 AJAX 调用来获取每个脚本 src,并评估返回。稍后我会在这里发布相关代码。

于 2012-11-05T17:53:01.227 回答