Jquery ui 防止JQuery的恶意覆盖

Jquery ui 防止JQuery的恶意覆盖,jquery-ui,jquery,malware,Jquery Ui,Jquery,Malware,长话短说: 关于基于JQuery/JQueryUI的系统,我们已经记录了一些错误。在它的核心,我们正在做一个非常基本的点击链接->jQueryAjax获取->打开JQueryUI模式 我们得到的错误看起来很简单——“对象不支持属性或方法‘dialog’”——这让我们相信JQueryUI有错误。在花费大量时间排除浏览器不兼容、JQuery端的错误代码、我们端的错误代码、愤怒的代码神之后。。。我们运气好。在办公室的一台机器上进行100%的复制 事实证明,这件事充斥着广告软件——特别是EasyLine

长话短说:

关于基于JQuery/JQueryUI的系统,我们已经记录了一些错误。在它的核心,我们正在做一个非常基本的点击链接->jQueryAjax获取->打开JQueryUI模式

我们得到的错误看起来很简单——“对象不支持属性或方法‘dialog’”——这让我们相信JQueryUI有错误。在花费大量时间排除浏览器不兼容、JQuery端的错误代码、我们端的错误代码、愤怒的代码神之后。。。我们运气好。在办公室的一台机器上进行100%的复制

事实证明,这件事充斥着广告软件——特别是EasyLine的老版本。当用户单击任何链接时,将加载一系列javascript文件,包括从Google的CDN重新加载JQuery

对于大多数链接来说,这并不是一个真正的问题——它们会让你离开页面,所有内容都会重新加载。但是对于我们的modals来说,这意味着每个modals链接都会在请求发送时标记在JQuery上,从而导致响应试图使用“new”$,这将丢失JQueryUI和任何其他插件

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


有什么想法吗?我知道JQuery的noConflict()方法,但粗略地看了一眼之后,我认为它不适合使用。

这只是一种变通方法,而不是一个成熟的解决方案。
您可以在这里尝试多种方法
1.如果您可以控制广告软件加载的内容,那么只需输入如下内容
if(!$)
他们尝试加载jquery的位置
2.尝试在页面末尾加载插件

3.即使页面末尾不起作用。尝试使用
document.write
)将链接(一个
script标记
)注入Jquery document ready事件中的插件CDN。这将确保插件代码在所有jquery都已加载时加载(不是首选项)。

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

基本上

我们已经“保存”了原始JQuery——由于我们的处理程序,我们已经将其放入范围内,但在加载之后,它可以很容易地放入单独的全局(如$$)中。在我们的ajax响应处理程序中,我们有一个相当简单的检查

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

这会将全局jquery重置为它应该的状态。

不幸的是,广告软件jquery仅在用户单击链接时加载-页面加载完成后很久,因此将脚本放在底部是不起作用的。我们也无法控制广告软件的加载方式,因此无法通过这种方式直接解决问题。我们想出了另一个主意,我将把它放在原来的问题里。