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