运行用ajax加载的脚本标记

时间:2012-07-11 04:47:27

标签: jquery ajax cloudflare

一般问题

假设您有一个简单的ajax请求,例如$("#container").load('/url #content');。加载的DOM将类似于

<a>email</a>
<script>/* some script */</script>

如何才能执行脚本标记的内容?

具体问题

Cloudflare通过将文本替换为[email protected]并包含解除它的脚本来自动保护DOM中的电子邮件地址。但是,可以异步加载内容,并且不会执行解析的脚本。我可以关闭电子邮件保护功能(我想),但我想知道是否还有另一种解决方法。

实施例

http://aysites.com/what查看实际操作 - 点击“联系”

3 个答案:

答案 0 :(得分:3)

有一个纯js函数可以调用JavaScript编译器。它是eval。你需要使用它。

示例:

jQuery.globalEval("var newVar = true;")

on jQuery.com

eval("x=10;y=20;document.write(x*y)");
document.write("<br />" + eval("2+2"));
document.write("<br />" + eval(x+17));

on w3schools

答案 1 :(得分:2)

我的回答还包括Tooraj的一些魔力。

基本上,我们将使用相同的加载函数,在回调中,我们将获取脚本,从中获取函数,然后评估它们。

$("#container").load('/url #content', function(){
  eval($('#container script').html()); 
});

使用上面的选择器并从该选择器中取出HTML(这恰好是脚本中的函数),然后我们可以eval运行该函数并使其运行。

Here's a working jsFiddle.

答案 2 :(得分:1)

您可以将脚本部分单独放在具有适当标头的页面中,然后使用$.getScript()来获取并执行脚本,

请参阅文档:http://api.jquery.com/jQuery.getScript/