多次Eval或加载远程脚本

时间:2009-11-04 03:21:38

标签: javascript prototype

是否可以加载远程脚本并对其进行评估?

例如:

$(someelement).update("<script type='text/javascript' src='/otherscript.js'>");

otherscript.js

alert('hi!');

这不起作用。我想在每次用户点击某些内容时加载该脚本。我想另一个选择是将该脚本的内容放在我的主脚本中(并根据需要进行评估),但这不是一个很好的方法。

另外,如果可以的话,是否可以从另一个域评估脚本?

2 个答案:

答案 0 :(得分:7)

不使用任何框架(感谢CodeJoust):

// a is the script to call
// b is the ID of the script tag (optional)

function scriptc(a,b){
  var __d=document;
  var __h = __d.getElementsByTagName("head")[0];
  var s = __d.createElement("script");
  s.setAttribute("src", a);
  s.id = b;
  __h.appendChild(s);
}

scriptc("http://example.com/someother.js");
// adds to DOM and it'll get loaded

但请注意,因为其他域上的脚本可以访问您域中的敏感信息,例如PHP中的Cookie会话ID。

示例:

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>

<div id="cool">testing</div>

<script type="text/javascript">//<!--
function scriptc(a,b){
  var __d=document;
  var __h = __d.getElementsByTagName("head").item(0);
  var s = __d.createElement("script");
  s.setAttribute("src", a);
  s.id = b;
  __h.appendChild(s);
}

scriptc("http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js");

// --></script>

</body>
</html>

加载之后,我使用Firebug来检查$("#cool").html()

答案 1 :(得分:0)

这是原型方式,以防万一有人发现它有用:

function scriptc(parent, src) {
  var s = new Element('script');
  parent.appendChild(s);
}

scriptc($('someelement'), 'http://...');