gpt4 book ai didi

jquery-ui - 防止JQuery的恶意覆盖

转载 作者:行者123 更新时间:2023-12-01 04:57:25 24 4
gpt4 key购买 nike

长话短说:

一段时间以来,我们一直在记录有关基于 JQuery/JQueryUI 的系统的错误。其核心是我们正在做一个非常基本的点击链接 -> JQuery AJAX GET -> 打开 JQueryUI 模式模式。

我们遇到的错误看起来很简单 - “对象不支持属性或方法‘对话框’” - 让我们相信 JQueryUI 存在错误。在花费了大量时间排除浏览器不兼容性、JQuery 端的错误代码、我们端的错误代码、愤怒的代码之神......之后,我们幸运地得到了突破。在办公室的一台机器上 100% 重现。

事实证明,这东西充满了广告软件 - 特别是 [旧版本] easyinline - http://www.easyinline.com 。当用户单击任何链接时,将会加载一系列 JavaScript 文件,包括从 Google 的 CDN 重新加载 JQuery。

对于大多数链接来说,这并不是真正的问题 - 它们无论如何都会让您离开页面并且所有内容都会重新加载。但对于我们的模态,这意味着每个模态链接都会在发送请求时在我们的 JQuery 上标记,导致响应尝试使用"new"$,而现在将缺少 JQueryUI 和任何其他插件。

最初,我们考虑为“我们的”JQuery 制作另一个全局变量($$ 或其他东西),并在我们的代码中显式使用它,而不仅仅是 $。问题是我们使用了一些其他依赖于 $ 的第三方工具,并且加载广告软件的 $ 是不同的(旧的)版本。因此,正确保存 $ 很重要。

有什么想法吗?我知道 JQuery 的 noConflict() 方法,但粗略浏览后认为它不符合要求。

最佳答案

最终,我们决定在收到任何 ajax 响应时(即在执行开放模式代码之前)重新建立 JQuery 完整性。我们所有的 ajax 内容都包含在我们自己的处理程序中,因此很容易全面注入(inject)。

基本上;

我们已经“保存”了原始的 JQuery - 由于我们的处理程序,我们已经将其纳入范围内,但在加载后可以轻松地将其放入单独的全局(如 $$)中。在我们的 ajax 响应处理程序中,我们进行了相当简单的检查;

if (window.$ !== $$) {
window.$ = window.jquery = window.jQuery = $$;
}

这会将全局 jquery 重置回应有的状态。

关于jquery-ui - 防止JQuery的恶意覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13478430/

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