0

ページに動的に追加されたスクリプトを実行したい(経由innerHTML)これを見つけました:

ajax出力スクリプトの実行方法

これは近いですが、葉巻はありません。AJAX応答でこれらの1つを(他のコンテンツとともに)取得しています:

<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

あなたのコードがなければ、私はいくつかの仮定をします。

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)

参照。使用済み。:

于 2012-11-05T17:38:44.667 に答える
0

誰かがより良い方法を考え出さない限り...

最終的にAJAX呼び出しを使用して、各スクリプトsrcを取得し、戻り値を評価します。関連するコードをここに少し投稿します。

于 2012-11-05T17:53:01.227 に答える