【问题标题】:jQuery UI: Superfish WindowShopper steals .dialog(), resulting in exception Object [object Object] has no method 'dialog'jQuery UI:Superfish WindowShopper 窃取 .dialog(),导致异常 Object [object Object] has no method 'dialog'
【发布时间】:2023-03-26 15:13:01
【问题描述】:

我网站的一些访问者加载了很多脚本,但我的网站没有链接。这可能是由于软件 Superfish WindowShopper。 这个库似乎也加载了 jQuery,所以我的页面为一些访问者加载了多个版本的 jQuery。

这会导致异常: Object [object Object] 没有方法'dialog'

如何防止 Superfish(或其他广告软件)窃取我的 jQuery UI .dialog?

一些无意链接的脚本:

https://appnext-a.akamaihd.net/source-ds.js
//www.superfish.com/ws/sf_main.jsp?dlsource=pcom&userId=4709955453116160291&CTID=p0

等等等等。脚本因浏览器而异。 Akamaihd.com 的第一个是经过修改的 jQuery。也许还有更多。多个 jQueries 使 .dialog 消失 (Uncaught TypeError: Object [object Object] has no method 'dialog')。

小提琴:http://jsfiddle.net/fybJ3/ 问题出现在 Chrome 和 Firefox 中。 IE 显示对话框没有问题。

我当前的解决方法:在发生此异常时显示老式的“警报”。

我该怎么办?

  • 能否修复 jQuery UI,以便在加载多个版本的 jQuery 时显示对话框?
  • 我应该为对话框选择不同的库吗?
  • 或者???

【问题讨论】:

  • 如果您可以从该列表中删除不相关的脚本条目,这可能是最好的。
  • 感谢您的快速回复。根据以下内容,无法在访问者端卸载脚本:stackoverflow.com/questions/4365062/… 而且我不知道要卸载什么,因为包含的脚本不同。
  • 不是来自网站,来自您的问题。包含的许多脚本与问题无关。
  • 已更新问题并添加了 Fiddle。

标签: javascript jquery jquery-ui


【解决方案1】:

最好的办法是使用 noConflict() 隔离已知的 jQuery 实例。

发生的情况是新版本将覆盖第一个版本,因此绑定到第一个版本的所有插件都将被清除。

See noConflict() API docs

【讨论】:

  • 谢谢。这是关键。我还没有解决问题,因为我需要排查以下困难:
  • 1. Evey 脚本需要包含 noConflict。 2. 当我的脚本之前和之后包含“广告软件”库时,行为是不同的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
相关资源
最近更新 更多