两个第三方JavaScript库命名冲突

时间:2013-12-13 23:27:48

标签: javascript collision

我有一个动态抓取这两个文件的页面。

  1. http://cdn.dev.skype.com/uri/skype-analytics.js
  2. http://nexus.ensighten.com/somethingelse.js(跟踪工具)
  3. 现在Skype有以下几行:

    s.trackAction(_t, this);
    

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

1 个答案:

答案 0 :(得分:4)

您可以执行以下操作:

  1. 加载一个脚本。
  2. 将对s的引用保存到变量中,假设为first_s
  3. 加载第二个脚本
  4. 将对s的引用保存到变量,假设为second_s
  5. 然后,将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和其他使用$符号的人向大家展示了如何正确地做到这一点。