5

一般问题

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

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

我该怎么做才能让脚本标签的内容执行?

具体问题

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

例子

在http://aysites.com/what上查看它的实际操作——点击“联系”

4

3 回答 3

3

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

例子:

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

在 jQuery.com 上

或者

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

在 w3schools 上

于 2012-07-11T04:52:59.033 回答
3

我的回答也包括了Tooraj 的一些魔法。

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

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

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

这是一个工作的jsFiddle。

于 2012-07-11T05:52:15.287 回答
1

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

见文档:http ://api.jquery.com/jQuery.getScript/

于 2012-07-11T04:58:55.573 回答