天天看點

scriptaculous1.7.0和Prototype1.5.1不相容引起的問題

    Scriptaculous1.7.0和Prototype1.5.1不相容,在Scriptaculous的下載下傳首頁上已經注明了。不過,下載下傳過後就把它忘記了,由于Scriptculous要求的1.5.0以後的Prototype,于是就下載下傳了一個1.5.1版本,于是就出現了一個很嚴重的問題:

        Stack overflow at line: 0 該錯誤出現在IE浏覽器,在Firefox上可能是另外一個錯誤。

        出現問題的位置:

        在代碼中使用Element.setOpacity()函數。

        出現問題的原因:

        在Scriptaculous的effect.js和prototype.js中重複定義了該方法,并且使用了繼承,導緻調用時形成無限遞歸。于是出現堆棧溢出錯誤。在Firefox中給出了堆棧溢出的位置是prototype.js中的如下代碼中:

1314

scriptaculous1.7.0和Prototype1.5.1不相容引起的問題
scriptaculous1.7.0和Prototype1.5.1不相容引起的問題

Element.extend.cache = ...{

1315

scriptaculous1.7.0和Prototype1.5.1不相容引起的問題
scriptaculous1.7.0和Prototype1.5.1不相容引起的問題

  findOrStore: function(value) ...{

1316

scriptaculous1.7.0和Prototype1.5.1不相容引起的問題
scriptaculous1.7.0和Prototype1.5.1不相容引起的問題

    return this[value] = this[value] || function() ...{

1317

scriptaculous1.7.0和Prototype1.5.1不相容引起的問題

      return value.apply(null, [this].concat($A(arguments))); //在該行出現錯誤

1318

scriptaculous1.7.0和Prototype1.5.1不相容引起的問題

    }

1319

scriptaculous1.7.0和Prototype1.5.1不相容引起的問題

  }

1320

scriptaculous1.7.0和Prototype1.5.1不相容引起的問題

};

        解決方法:

        1、将prototype更換為低版本,即1.5.0(也隻有這一個版本符合要求)

        2、将scriptaculous更換為高版本,即1.7.1 beta3(該版本聲明相容Prototype1.5.1)

繼續閱讀