gpt4 book ai didi

jquery - 有没有一种好方法告诉 jQuery 不要在 HTML 的 ajax 请求上评估脚本

转载 作者:行者123 更新时间:2023-11-30 23:45:09 25 4
gpt4 key购买 nike

我正在使用 jQuery 发出 ajax 请求,一切都按预期工作。但它在错误的上下文中评估脚本。

我有一个 iframe(相同的域,这里不用担心),我试图让脚本在 iframe 的上下文中进行评估,而不是在发出 ajax 请求的地方 - 例如。不同的框架。

我想我可以告诉 ajax 不要评估脚本,并且我会自己完成工作以在正确的上下文中评估它们。有什么想法或方法可以禁用自动评估吗?

编辑

所以,我对最初的问题有些错误。加载时不会评估脚本,而是将内容放入文档中时评估脚本。您可以通过测试示例看到这一点:

$('#some_element').html('<span>content</span><script>alert(window)</script>');

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

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

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

最终更新

我最终追踪到了它的源头,并从那里覆盖了它..以下是coffescript,但你可以明白这个想法。我选择覆盖它,因为就我的使用而言,这种情况永远不会发生在顶部窗口中,但应该出现在 iframe 内容中。

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

最佳答案

这个问题展示了如何对脚本进行自定义评估:

jQuery: Evaluate script in ajax response

在下面的代码中... **此代码来自另一个问题的答案**只是将其作为片段获取:

  $("body").append($(xml).find("html-to-insert").eq(0));
eval($(xml).find("script").text());

eval 本身绑定(bind)到一个窗口,您可以将其定义为上下文:

windowObject.eval - 当仅调用 eval('...') 时,它假设您像这样调用:window.eval('...')

现在您需要获取与要在其中执行 eval 的帧相对应的窗口,并执行如下操作:

myIFrameWindow.eval('...')

当您执行此操作时,它将在该窗口的上下文中执行。只需找到与您现在想要的 iframe 关联的窗口即可。

要查找给定框架的窗口,请查看这篇文章:

Getting IFRAME Window (And Then Document) References With contentWindow

关于jquery - 有没有一种好方法告诉 jQuery 不要在 HTML 的 ajax 请求上评估脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com