小编jej*_*s0n的帖子

有没有办法告诉jQuery不要对HTML的ajax请求评估脚本

我正在使用jQuery发出ajax请求,并且一切正常。但是它在错误的上下文中评估脚本。

我有一个iframe(相同的域,这里没有后顾之忧),我正在尝试使脚本在iframe的上下文中进行评估,而不是发出ajax请求的位置-例如。不同的框架。

我想我可以告诉Ajax不要评估脚本,而我会自己做工作以在正确的环境中评估脚本。有什么想法或禁用自动评估的方法吗?

编辑

因此,对于最初的问题,我有些不对。加载时不会评估脚本,而是将内容放置在文档中时才评估脚本。您可以通过测试示例来了解这一点:

$('#some_element').html('<span>content</span><script>alert(window)</script>');
Run Code Online (Sandbox Code Playgroud)

现在,当从不同的框架执行此操作时,评估将在调用的范围内进行,而不是要在其中插入内容的元素。

我最终在不使用jQuery的情况下设置了内容,然后查找/避开了任何脚本标签:

element.get(0).innerHTML = data;
element.find('script').each(function() {
  otherWindow.eval(this.innerText);
});
Run Code Online (Sandbox Code Playgroud)

最终更新

我最终将其跟踪到源,并从那里覆盖它。.下面是coffeescript,但是您可以理解。我选择覆盖它是因为对于我来说,它永远不会在顶部窗口中发生,但是应该在iframe内容中出现。

    $.globalEval = (data) -> (iframeWindow.execScript || (data) -> iframeWindow["eval"].call(iframeWindow, data))(data) if (data && /\S/.test(data))
Run Code Online (Sandbox Code Playgroud)

ajax iframe jquery

5
推荐指数
1
解决办法
3351
查看次数

标签 统计

ajax ×1

iframe ×1

jquery ×1