如何运行包含从AJAX调用获得的JavaScript的<script>元素?</script>

时间:2013-02-07 21:25:17

标签: javascript html ajax dom

我有一个AJAX调用,返回此javascript:<script language='javascript' type='text/javascript'> alert('Hello World!') </script>.。我试着将它附加到&#39;身体&#39;并且&#39; head&#39;回调函数中DOM的元素,但都没有导致脚本执行。我怎样才能让它运行?

3 个答案:

答案 0 :(得分:0)

查看JS eval()http://www.w3schools.com/jsref/jsref_eval.ASP

当你得到你的回复时,将它添加到正文中,然后使用jquery拉出字符串并评估它。

$.get( url, function(data) {
    var d = $('<div/>').appendTo($('body')).append(data);
    eval($('script', d).text());
    d.remove();
  }
)

'&LT; DIV /&GT;'是一个文字,用于在DOM中创建一个节点(在使用后丢弃),作为js代码的占位符。

上面的代码适用于多个'&lt; script /&gt;'片段也是。

答案 1 :(得分:0)

让服务器返回代码而不 脚本标记,然后运行它创建一个函数

(new Function('alert("Hello World")'))()

如果您之前无法避免使用脚本标记,则可以在应用之前使用正则表达式将其删除

var data = '<script type="text/javascript">alert("hello world")</script>';
var regex = /<[^>]*script[^>]*>(.*)<\/[^>]*script[^>]*>/;
data.replace(regex,"$1")

甚至将字符串拆分为特定字符(不是一个好的选择,原因很明显:你弄乱字符串,你的代码将不再运行)

var data = '<script type="text/javascript">alert("hello world")</script>';
data.substr(31,data.length - 40);

第一种选择更好,性能更好。

如果你真的想按原样使用整个字符串执行代码,你只需要确保你使用的库没有转义代码。

答案 2 :(得分:0)

这对我来说非常适合作为

的替代品
<script></script>

...甚至在使用AJAX加载的HTML文件中工作!

<img src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" onload="alert('test');this.parentNode.removeChild(this);" />

试试吧。它使用图像'onload'调用来运行内部javascript,只要加载了包含数据的uri,一个像素的图像。