两个第三方JavaScript库命名冲突

Two third party JavaScript library naming collision

本文关键字:冲突 JavaScript 第三方 两个      更新时间:2023-09-26

我有一个页面可以动态获取这两个文件。

  1. http://cdn.dev.skype.com/uri/skype-analytics.js
  2. http://nexus.ensighten.com/somethingelse.js(跟踪工具)

现在Skype有以下线路:

s.trackAction(_t, this);

不幸的是,跟踪工具JavaScript文件也有s作为对象,因此s.trackAction对Skype无效,并破坏了整个页面。

您可以执行以下操作:

  1. 加载一个脚本
  2. 将对s的引用保存到一个变量中,比如说first_s
  3. 加载第二个脚本
  4. 将对s的引用保存到一个变量中,比如second_s

然后,将s设置为您希望成为默认全局值的值(例如,其他人的代码)。

然后,对于你自己的代码或你正在使用的任何其他代码,将其放入这种类型的块中:

(function(s) {
    // any code in here that refers to `s` will see the value of second_s
})(second_s);

(function(s) {
    // any code in here that refers to `s` will see the value of first_s
})(first_s);

我能想到的另一个选项是修改Skype代码,使用名为skype而不是s的全局变量,并将修改后的版本包含在您的页面中。

如果skype代码写得正确,它就可以不使用像s这样简单的全局定义名称。jQuery和其他使用$符号的人已经向每个人展示了如何正确地做到这一点。