多个Javascript冲突

时间:2011-05-12 22:32:36

标签: javascript

我正在尝试在同一页面上运行2个脚本,但它们彼此之间不会很好。一个名为TabTop http://www.isdntek.com/tagbot/tabtop.htm,另一个名为Clic * Pic http://www.isdntek.com/tagbot/gallery.htm,均为isdntek。我可以让他们中的任何一个单独运行,但不能同时运行。我环顾四周,试图自己找到这个问题的答案,但无济于事。

我非常感谢可以提供的任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以将每个脚本包装在自调用函数中:

(function(){
  //As long as you don't use global variables
  //the content here is protected from any interaction with the outside
})();

现在,如果两个代码都使用全局变量,那么任务将更加困难。

答案 1 :(得分:0)

RainbowCodeModule6.js文件被两个页面使用,它设置了大量的全局变量(很多因为它没有在函数中声明局部变量),所以很可能有两个脚本尝试使用同一组全局变量,它们会发生冲突。例如(我在这里张贴的包装)

function changeShades(color){ //--update the vertical column of light/dark shades
    var ymax=paletteymax
    if (!color){return}
    for (i=0; i<ymax; i++){
    document.getElementById('colorShades'+i).
           style.backgroundColor=colorBrightness(color,(ymax-1-i)/(ymax-1))
    }
}

上述内容并未将其i置于本地,取决于全局paletteymax。我不能说这是不是你的问题,但它表明编程和应用程序架构很差。另一个例子:

function dec2hex(R,G,B) { //--Converts three R-G-B components to
                          //  a single internet hex color
    var hexTest="0123456789ABCDEF";
    Rd_hi=R/16; Rd_lo=R%16;
    Rd=hexTest.substr(Rd_hi,1)+hexTest.substr(Rd_lo,1)
    Gn_hi=G/16; Gn_lo=G%16;
    Gn=hexTest.substr(Gn_hi,1)+hexTest.substr(Gn_lo,1)
    Bu_hi=B/16; Bu_lo=B%16;
    Bu=hexTest.substr(Bu_hi,1)+hexTest.substr(Bu_lo,1)
    hexval='#'+Rd+Gn+Bu
    return hexval;
  }

为什么他们决定保留hexTest本地,但让所有其他变量全球化超出我的范围。变量RGB也是全局的,但在这里它们是本地的,因为它们是函数声明中的形式参数。

它还使用document.write在部分中编写表,这绝不是一个好主意。我认为这只是一个写得不好的脚本,找到别的东西。